当承诺被服务器端拒绝时显示警报客户端
Show an alert client side when a promise is rejected server side
我对 promise 不是很熟悉,但是我在我的代码中实现了一些,并且真的希望在 promise 被拒绝时从客户端出现警报。
这是我调用客户端的套接字
socket.emit('updateExistingItem', NewItem, (boolean) => {});
NewItem 是一个包含我要发送的字段的对象。
这调用了我的 inventory.js 文件中的承诺
export const updateExistingItem = (ItemObject) => {
return new Promise(async (resolve, reject) => {
try {
const updateExistingItem = `UPDATE console.inventory_items SET Description = '${(ItemObject.Description).replace(/\'/g, "")}', Location = '${(ItemObject.Location).replace(/\'/g, "")}', ModelNumber = '${(ItemObject.ModelNumber).replace(/\'/g, "")}'`
const response = await db(updateExistingItem, `Updating Item`);
resolve(response);
} catch (e) {
console.log("ERROR inventory.updateExistingItem: " + e);
reject(e);
}
});
};
如果客户端的用户在 NewItem 对象中输入的信息不与 SQL 调用配合,我需要一种方法来提醒该用户该信息不是 saved/updated.就目前而言,这对用户来说有点误导,因为如果他们输入的东西被拒绝了,看起来他们最终成功了。
如果有人有解决方案那就太好了!谢谢
编辑
这是我的 sockets.js 文件中的套接字
socket.on('updateExistingItem', async (ItemObject, callback) => {
try {
const results = await updateExistingItem(ItemObject);
if (results.affectedRows === 1) {
callback(true);
}
callback(false);
}
catch (error) {}
});
我的 server.js 文件中使用了 SocketIO
var server = http.createServer(app);
const io = socketIO(server);
io.on('connection', (socket) => {
require('./middleware/sockets')(socket);
});
有 4 个不同的文件使用了这些文件,所以这就是为什么我只放置与此特定调用实际相关的片段的原因。
好的,所以我能够自己找到一个不错的解决方案。
在我的 sockets.js 文件中的套接字中,我在 catch 方法中放置了一个回调,就像这样
socket.on('updateExistingItem', async (ItemObject, callback) => {
try {
const results = await updateExistingItem(ItemObject);
if (results.affectedRows === 1) {
callback(true);
}
callback(false);
}
catch (error) {
callback(false);
}
});
从那里我决定控制台记录在客户端 socket.emit 中找到的布尔值,并且能够在 return.
中获得此回调值
现在看起来像这样
socket.emit('updateExistingItem', NewItem, (boolean) => {
if(boolean){
alert('Successful!');
}else{
alert('UnSuccessful!');
}
});
如果此承诺被拒绝或解决,我现在会从客户端获得更新。
我对 promise 不是很熟悉,但是我在我的代码中实现了一些,并且真的希望在 promise 被拒绝时从客户端出现警报。
这是我调用客户端的套接字
socket.emit('updateExistingItem', NewItem, (boolean) => {});
NewItem 是一个包含我要发送的字段的对象。
这调用了我的 inventory.js 文件中的承诺
export const updateExistingItem = (ItemObject) => {
return new Promise(async (resolve, reject) => {
try {
const updateExistingItem = `UPDATE console.inventory_items SET Description = '${(ItemObject.Description).replace(/\'/g, "")}', Location = '${(ItemObject.Location).replace(/\'/g, "")}', ModelNumber = '${(ItemObject.ModelNumber).replace(/\'/g, "")}'`
const response = await db(updateExistingItem, `Updating Item`);
resolve(response);
} catch (e) {
console.log("ERROR inventory.updateExistingItem: " + e);
reject(e);
}
});
};
如果客户端的用户在 NewItem 对象中输入的信息不与 SQL 调用配合,我需要一种方法来提醒该用户该信息不是 saved/updated.就目前而言,这对用户来说有点误导,因为如果他们输入的东西被拒绝了,看起来他们最终成功了。
如果有人有解决方案那就太好了!谢谢
编辑
这是我的 sockets.js 文件中的套接字
socket.on('updateExistingItem', async (ItemObject, callback) => {
try {
const results = await updateExistingItem(ItemObject);
if (results.affectedRows === 1) {
callback(true);
}
callback(false);
}
catch (error) {}
});
我的 server.js 文件中使用了 SocketIO
var server = http.createServer(app);
const io = socketIO(server);
io.on('connection', (socket) => {
require('./middleware/sockets')(socket);
});
有 4 个不同的文件使用了这些文件,所以这就是为什么我只放置与此特定调用实际相关的片段的原因。
好的,所以我能够自己找到一个不错的解决方案。
在我的 sockets.js 文件中的套接字中,我在 catch 方法中放置了一个回调,就像这样
socket.on('updateExistingItem', async (ItemObject, callback) => {
try {
const results = await updateExistingItem(ItemObject);
if (results.affectedRows === 1) {
callback(true);
}
callback(false);
}
catch (error) {
callback(false);
}
});
从那里我决定控制台记录在客户端 socket.emit 中找到的布尔值,并且能够在 return.
中获得此回调值现在看起来像这样
socket.emit('updateExistingItem', NewItem, (boolean) => {
if(boolean){
alert('Successful!');
}else{
alert('UnSuccessful!');
}
});
如果此承诺被拒绝或解决,我现在会从客户端获得更新。