javascript - 可迭代的 Promises,对每个 Promise 进行评估
问题描述
我有一个要处理的项目列表。让我们说 A、B、C、D、E .. 我有一个处理这些项目的承诺列表。每个 Promise 可以处理 1 个或多个项目。我有一份需要强制处理的项目清单。
假设A,C是强制性项目。
- 承诺 1 处理 A、B
- 承诺 2 过程 A,C
- 承诺 3 过程 B、C。
我可以在以下任何情况下返回
- P1,P2完成(不用管P3)
- P1,P3都完成了(不用管P2)
- P2,P3都完成了(不用管P1)
- P1,P2,P3 完成。
所有的 Promise(异步调用)都是按顺序从同一个项目开始的。我如何使用 Promise of iterables 来处理这个问题。?
我能想到的一种方法是
Promise.race(
Promise.all(P1,P2),
Promise.all(P1,P3),
Promise.all(P2,P3),
Promise.all(P1,P2,P3)
)
这应该有效。但这需要我根据mandatoryItems 和eachPromiseItems 来构造promise 组合列表。
有没有一种优雅的方式来在 JavaScript 中处理这种情况?
解决方案
作为可选建议。您可以创建一个 Promise 包装器来处理您的所有 Promise 并在您需要时解决它。
function afterPromises(yourPromiseList, checker) {
var _P = new Promise((res, rej) => {
for (var p of yourPromiseList) {
p.then((data) => {
let checked = checker(data);
if(checked===true){
res()
}
if(checked===false){
rej()
}
})
}
})
return _P;
}
afterPromises([...yourPromiseList], () => {
var itemsDict = {}// a closure var to register which your items processed
return (data) => {
itemsDict[data.id]=true
//And your extra logic code
return true
//or return false
//or reutrn undefined
}
}).then(()=>{
//resolved
})
未经测试的代码
推荐阅读
- asynchronous - 任务看门狗被触发 - 任务没有及时重置看门狗
- java - persistence.xml 是否支持 *.xml?
- javascript - ReactJS中如何访问数组中的每个元素并为数组中的所有元素创建一个页面?
- android - 我怎样才能安装领域
- javascript - 它是一种从js中的xmlhttp2请求中提取var的方法吗?
- google-cloud-platform - 使用后端存储桶和 Cloudflare 从 Google 负载均衡器获取原始 IP
- r - 使用每行的多个参数在每一行数据帧上调用自定义函数
- python - 更改 xpath
- php - 有没有其他方法可以解决这个问题?
- javascript - 如何更新 CharJS 折线图中 2 条线的 2 个数据集?