传统上,在同步语言中,诸如有条件地退出两个嵌套的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(){})
呼叫吗?看起来丑陋,过于复杂且难以理解。
抱歉,您不喜欢它,但是如果您需要等待所有异步操作完成再继续操作,则必须使用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
,但是如果您需要等待多个promise解决。
您还可以考虑使用类似co
基于生成器的控制流之类的方法,该方法可以为您处理承诺数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句