承诺问题 - .then() 没有被调用?

Promise problems - .then() not getting called?

我有两个需要按特定顺序 运行 的 Sequelize 查询,第一个创建一个模型,第二个从一个数组创建多个模型。它的工作原理是先插入 obj1 然后插入交易数组,但是最后的 'then()' 似乎没有被调用...我做错了什么?

var fn = function addTransaction(transaction) {
     return new Promise(function() {
          return Transaction.create(transaction, { fields: [ 'Id', 'Name' ]});
     }
};

var transactions = [...]; //array of transaction objects

Model1.create(obj1, { fields: [ 'Id', 'Name' ,'Description' ]}).then(function() {

    var actions = transactions.map(fn);
    var results = Promise.all(actions).then(function(data) {
        return Promise.all(data.map(fn));
    });
    results.then(function() {
        console.log("Done?"); //not getting called
    });

}).catch(function(err) {
    console.log(err);
});

我不确定这是否能准确解决您的问题,但我认为您缺少 return:

...
return results.then(function() {
    console.log("Done?"); //not getting called
});
...

如果没有它,Model1.create 承诺将在 results 完成之前解决。

addTransaction() 永远不会解决它创建的承诺。您创建了一个外部承诺并 return 它,但从未解决它。您至少必须为该回调声明一个 resolve 参数,然后在某处调用 resolve()

但是,如果 Transaction.create() 已经 return 是一个承诺,那么您可以将 addTransaction() 更改为:

var fn = function addTransaction(transaction) {
     return Transaction.create(transaction, { fields: [ 'Id', 'Name' ]});
};

还不清楚为什么您使用相同的 fn 来处理每个交易产生的 transactions 数组和 data 数组。从逻辑的角度来看,这似乎有点奇怪。您确定这是编写代码的正确方法吗?为了让我们帮助您设计那部分代码,您必须通过对第一个交易数组然后再次对结果调用 fn 来更多地解释您想要完成的工作从那个。