javascript - 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
完成运行之前首先被执行。我怎样才能解决这个问题 ?
解决方案
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),这使得它更易于推理,所以如果你有兴趣可以查一下。
推荐阅读
- c# - Chilkat FTP2 主机名中的日文字符
- sql - 在 SQL Server 中替换/更新表行 [批量数据] 的字符串时性能很慢
- spring - Spring Boot 2客户端无法解析标头
- vba - 在 VBA 中使用单元格引用公式返回要在 VBA 代码中使用的单元格
- ios - 在 Xamarin iOS 中使用 Hockey SDK 时应用程序崩溃
- c# - Mysql 实体框架异常
- java - java.lang.UnsupportedOperationException(无法将arraylist添加到列表中)
- javascript - 简单的乘法计算器不保留十进制值
- python - Python 多处理库 Pool.map()
- java - JaVers - 如何在 JSON 中添加额外字段以引用实体