首页 > 解决方案 > Promises.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完成运行之前首先被执行。我怎样才能解决这个问题 ?

标签: javascriptnode.js

解决方案


Promise.all当你想等待多个Promise 完成时很有用。在这种情况下,您似乎只是在等待一个。

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

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

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

ES7 中有一些较新的语言特性(async/await),这使得它更易于推理,所以如果你有兴趣可以查一下。


推荐阅读