在同一个 Promise 元素上调用多个 .then(),而不链接它们

问题描述 投票:0回答:1

我试图在同一个 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() 。 这段代码中我缺少什么?

javascript vue.js promise vuejs3 sequelize.js
1个回答
0
投票

无论您如何添加

.then()
回调,它们都是链接的。它们按照您添加的顺序执行。

为了让第二个获得与第一个相同的数据,第一个需要返回该数据。例如:

.then(queryResult => {
  // your code
  // and then...

  return queryResult;
})
© www.soinside.com 2019 - 2024. All rights reserved.