javascript - 使用 Promise.map 的每个承诺值作为下一个循环的输入
问题描述
我已经完成了一整天的研究,研究如何在 a 中获取每个 promise 的结果,Promise.map
并将其用作相同循环期间的下一次迭代中的输入Promise.map
。我严格需要执行此方法,因为在必须是 ATOMIC的数据库操作中使用此逻辑,并且在任何承诺拒绝的情况下,必须回滚所有先前的事务。
注意:我已经使用promise.each
并且它运作良好,只是它不允许我关联各个承诺并在失败时全部回滚。因此,当仔细解决每个承诺并返回值而不会在下一个循环中Promise.map
引起时,这似乎是最好的解决方案。Error: Transaction query already complete
这是knex的逻辑:
var obj={};
knex.transaction(function(trx) {
return Promise.map(array, function(item) {
return trx.insert(item).into('table')
.then(returnedFields => {
//do some validation/operation and return the result or the returnedFields themselves as input in the next loop.
//[START EDIT: this responds to comment by @ Mikael Lepistö for clarity]
//update obj here to be used in next loop
//[END EDIT]
});
}, {concurrency: 1});
})
.then(function(inserts) {
console.log(inserts.length + 'Items saved.');
})
.catch(function(error) {
console.error(error);
})
解决方案
看一下这个:
var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
推荐阅读
- list - 如何从 Scala 中的映射键中获取值的常见元素?
- batch-file - 如何从变量的字符串值中捕获特定的子字符串?(cmd或批处理)
- linux - 是否可以在 sudoedit 授予的文件上使用 ansible 模板/副本
- machine-learning - 截止点 1 的随机森林
- java - 如何使用 sqlite 制作 android 测验应用程序?
- statistics - 如何使用统计方法计算某些受访者群体的加权平均值(未给出加权因子时)?
- azure-api-management - Azure API 管理中的新 API
- c# - 访问 Visual Studio 的 $exception 变量
- machine-learning - 文本序列匹配的深度学习模型
- wordpress - 更改分页链接