我试图在同一个 Sequelize Promise 上调用 2 个不同的 .then() 。 我不需要链接 then(),我只想在承诺解决时调用 2 个不同的效果。
第一个 then() 在创建 Promise 后立即调用,在创建 Promise 的同一函数中。 第二个是在 Promise 对象返回到主代码后调用的。
这是我的主要代码:
const Status = require('../controllers/status.controller');
// The dataArray comes from somewhere else in the code and is OK
command = Status.save(dataArray);
console.log(command + ' display 1');
command.then(
queryResult => {
console.log(queryResult + ' display 2');
if(typeof queryResult.command !== 'undefined') {
console.log(queryResult.command.command);
}
});
以及“../controllers/status.controller”中调用的 save() 函数:
exports.save = (dataArray) => {
var b = B.findOne({
include: [{
model: Command
}],
where: {
bId: dataArray[0]
}
}).then(
queryResult => {
console.log(queryResult + ' display async');
status.create({
bId: queryResult.id,
});
queryResult.update({
lastStatus: dataArray[3],
});
}
);
console.log(b + ' display 0');
return b;
}
在这两种情况下(显示 0 和 1),我都得到了 Sequelize 承诺。
问题:在主代码调用的第二个 then() 中,查询结果为 null,而它是第一个中正确的 Sequelize 实例。 我期望两者得到相同的结果(“显示 2”与“显示异步”)。
我在代码中添加了控制台日志来显示对象的信息,这是不同的步骤,这是结果:
[object Promise] display 0
[object Promise] display 1
[object SequelizeInstance:b] display async
undefined display 2
TypeError: Cannot read properties of undefined (reading 'command')
我认为如果我们不链接它们,可以在同一个 Promise 对象上启动多个异步 then() 。 这段代码中我缺少什么?
无论您如何添加
.then()
回调,它们都是链接的。它们按照您添加的顺序执行。
为了让第二个获得与第一个相同的数据,第一个需要返回该数据。例如:
.then(queryResult => {
// your code
// and then...
return queryResult;
})