我的代码
//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
中的代码完成运行之前首先执行。我该如何解决这个问题?
答案 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)可以让你有更好的理由,所以如果你有兴趣的话,你可以查一下。