Promises.js - 我做得对吗?

时间:2018-05-31 13:21:01

标签: javascript node.js

我的代码

//run this first
 var promises = TransactionDetails.findAll({
      where: {
          //transaction_pincode:randomNumber,
          merchant_id:req.session.userId,
          transaction_verified:1
      } 
    }).then(transactionDetails => {
        var results = transactionDetails;
    }).catch(function(error){
      res.status(500);
      console.log(error);
      //res.json({error:error, stackError:error.stack});
      console.log("Error at dashboard:" + error);
      var results = "Error.";
    });

//then only run this
    Promise.all(promises).then(function(){
      res.render('dashboard',{data:results});
      console.log(data);
    });

我希望在运行Promise.all内的代码之前运行第一个代码块。这里的问题是Promise.all中的代码在var promises中的代码完成运行之前首先执行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当您想等待多个承诺完成时,

Promise.all非常有用。在这种情况下,看起来你只是在等待一个人。

在这种情况下,将处理移动到.then()会更有意义,如下所示:

TransactionDetails.findAll({
  where: { /*query*/ } 
}).then(transactionDetails => {
    res.render('dashboard',{data: transactionDetails});
    console.log(transactionDetails);
}).catch(function(error){ /*error handling*/ });

代码的正常流程不会等待承诺完成,因此任何依赖于承诺结果的内容都应该在.then()内。

ES7中有一些较新的语言功能(async / await)可以让你有更好的理由,所以如果你有兴趣的话,你可以查一下。