传统上,在同步语言中,诸如有条件地退出两个嵌套的foreach循环之类的任务将是一项简单的任务,例如:
return new Promise(resolve, reject){
AnArray.forEach(anElement){
ACONSTANTARRAY.forEach(ACONSTANTELEMENT){
if(anElement === ACONSTANTELEMENT){
resolve(bar);
}
}
}
resolve(foo);
}
但是,因为foo会立即解决,处理这种情况的最佳方法是什么?我是否必须将其转换为多个Promise.all(array.map(function(){})
来电?看起来丑陋,过于复杂,难以理解。
答案 0 :(得分:1)
很抱歉,您不喜欢它,但如果您需要等待所有异步操作完成后才能使用Promise.all
。
return Promise.all(AnArray.map(anElement =>
new Promise((resolve, reject) => {
if (ACONSTANTARRAY.find(ACONSTANTELEMENT => ACONSTANTELEMENT === anElement)) {
return resolve(bar);
}
reject(foo);
});
);
以上并没有做任何异步的事情。请记住,有许多异步库可以为您创建承诺,因此您甚至根本不需要new Promise
。您仍然需要使用Promise.all
,但是如果您需要等待多个承诺来解决。