gpt4 book ai didi

Promise 的 Javascript 竞态条件

转载 作者:行者123 更新时间:2023-12-01 04:04:06 28 4
gpt4 key购买 nike

假设我有三个异步函数:

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 ,它会等待所有内容,并在任何 Promise 出现错误时立即拒绝:

return Promise.all([functionPromise1(), functionPromise2(), functionPromise3()]);

要在 functionPromise1() 拒绝时停止后两个进程,Promise 无法为您处理任何内容,您需要手动执行此操作。

关于Promise 的 Javascript 竞态条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41964641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com