假设我有三个异步函数:

functionPromise1, functionPromise2, functionPromise3

我希望同时调用所有三个,并提供以下详细信息:


如果functionPromise1被拒绝,则从中停止其他两个功能
精加工。
如果functionPromise2functionPromise3都已完成并且已解决,请继续执行代码的下一部分,但是如果functionPromise1最终被拒绝,则不要继续研究代码。
如果functionPromise2functionPromise3被拒绝,请不要继续执行代码的下一部分。


这些功能的用例是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无法为您处理任何事情,您需要手动执行。

07-26 03:21