我在JavaScript NodeJS Sequelize中有三种方法。 调用它们将保存如下:
setTransferHistory(senderId, recipientId, amountMoney, transferTitle);
setWidgetStatus(senderId);
setWidgetStatus(recipientId);
每种方法的确会在mysql数据库中进行更新或选择。 按顺序进行制作非常重要,但并非总是如此。
我知道解决此问题的方法是在setTransferHistory方法中使用单词,因此:
function setTransferHistory(
senderId,
recipientId,
amountMoney,
transferTitle,
) {
Transaction.create({
id_sender: senderId,
id_recipient: recipientId,
date_time: getTodayDate(),
amount_money: amountMoney,
transfer_title: transferTitle,
}).then(() => {
setWidgetStatus(senderId);
setWidgetStatus(recipientId);
});
}
...但是我不希望这两种方法都包含在此方法中。我只想一个写一个。
答案 0 :(得分:0)
由于Transaction.create
返回了Promise
,因此您可以让setTransferHistory
返回该值,并在setWidgetStatus
的诺言得到兑现之后推迟执行setTransferHistory
。因此:
const setTransferHistory = (
senderId,
recipientId,
amountMoney,
transferTitle
) =>
Transaction.create({
id_sender: senderId,
id_recipient: recipientId,
date_time: getTodayDate(),
amount_money: amountMoney,
transfer_title: transferTitle
});
您可以选择以下一种:
setTransferHistory(/* args ... */).then(() => {
setWidgetSatus(senderId);
setWidgetSatus(recipientId);
});
或者使用await
-与诺言一起使用,一旦在async
函数中使用它,setTransferHistory
就不需要异步:
async function foobar() {
await setTransferHistory(/* args ... */);
setWidgetSatus(senderId);
setWidgetSatus(recipientId);
}
当然,在这一点上,您可以直接使用Transation.create
,但要由您自己决定是否要添加抽象层。
答案 1 :(得分:-1)
您需要做的就是return
setTransferHistory
承诺create
给您,这样您就可以在通话结果上调用then
:>
function setTransferHistory(senderId, recipientId, amountMoney, transferTitle) {
return Transaction.create({
//^^^^^^
id_sender: senderId,
id_recipient: recipientId,
date_time: getTodayDate(),
amount_money: amountMoney,
transfer_title: transferTitle,
});
}
setTransferHistory(senderId, recipientId, amountMoney, transferTitle).then(() => {
// ^^^^^
setWidgetStatus(senderId);
setWidgetStatus(recipientId);
});
答案 2 :(得分:-1)
如今,处理诺言时,好的做法是使用async / await关键字。它们基本上允许您以同步方式运行异步代码。使用它们,您的代码将如下所示:
async function setTransferHistory(senderId, recipientId, amountMoney, transferTitle) {
return await Transaction.create({
id_sender: senderId,
id_recipient: recipientId,
date_time: getTodayDate(),
amount_money: amountMoney,
transfer_title: transferTitle,
});
}
await setTransferHistory(senderId, recipientId, amountMoney, transferTitle);
setWidgetStatus(senderId);
setWidgetStatus(recipientId);
await 关键字停止函数的执行,并等待Transaction.create()的结果,并且需要 async 才能在函数内部使用await。
希望这会有所帮助。