假设我有三个异步函数:functionPromise1, functionPromise2, functionPromise3
我希望同时调用所有三个,并提供以下详细信息:
如果functionPromise1
被拒绝,则从中停止其他两个功能
精加工。
如果functionPromise2
和functionPromise3
都已完成并且已解决,请继续执行代码的下一部分,但是如果functionPromise1
最终被拒绝,则不要继续研究代码。
如果functionPromise2
或functionPromise3
被拒绝,请不要继续执行代码的下一部分。
这些功能的用例是functionPromise1
作为输入验证,我想与其他将输入视为已验证的功能进行同步,以加快处理速度。但是,如果在functionPromise1
处发现输入在任何时候都无效,那么我想终止代码。
function functionPromise2(...){
return new Promise(function(resolve,reject){
fetchUrl(url, function(err, meta, body){
if (err) { reject(err); } else {
if (body.toString().indexOf(text) !== -1){
resolve();
} else {
reject("Could not find quote");
}
}
});
});
}
function functionPromise3(...) {
return new Promise(function(resolve,reject){
var id = shortid.generate();
var fileName = id+'.png';
webshot(url, fileName, { shotOffset: {left: mouseX, top: mouseY} }, function(err) {
if (err) { reject(err); } else {
resolve({id: id, fileName: fileName});
}
});
});
}
最佳答案
关于“继续到代码的下一部分”,您实际上是在寻找Promise.all
,它等待所有内容,如果任何承诺中有错误,则立即拒绝:
return Promise.all([functionPromise1(), functionPromise2(), functionPromise3()]);
要在
functionPromise1()
拒绝时停止后两个进程,promise无法为您处理任何事情,您需要手动执行。