我有一个承诺, Promise A
,它会检查'某些情况是异步的。它始终被解决(没有拒绝),因此只需要then
。 resolve
为真或假(前述条件)。
如果第一个承诺中未满足条件(resolve(false)
),则执行第二个承诺 Final Promise
。但是,如果符合初始条件(resolve(true)
),则会在两个': Promise B
之间执行其他承诺。
因为 Final Promise
会产生两个回调(then
和catch
),我正在尝试避免代码重复。这就是我正在使用的,它有效,但最终的回调是重复的。
promiseA().then((condition) => {
if (condition) {
promiseB().then(finalPromise().then(() => {
console.log('final promise success');
}).catch(() => {
console.log('final promise failure');
}));
} else {
finalPromise().then(() => {
console.log('final promise success');
}).catch(() => {
console.log('final promise failure');
});
}
});
我尝试以下内容,但它不起作用: Final Promise
正在执行 Promise B
promiseA().then((condition) => {
if (condition) {
return promiseB();
}
}).then(finalPromise().then(() => {
console.log('final promise success');
}).catch(() => {
console.log('final promise failure');
}));
此外,我尝试使用以下内容,但在 Final Promise
之后 Promise B
将无法执行:
promiseA().then((condition) => {
if (condition) {
return promiseB();
}
}).then(finalPromise).then(() => {
console.log('final promise success');
}).catch(() => {
console.log('final promise failure');
});
我猜测我可以将else
分支内部的所有内容(在第一个代码段中)存储到变量中并将其用于两种情况。我想知道Promise API中是否有解决方案。
答案 0 :(得分:1)
我明白了。 第三个代码段有效,但我需要“手动”解析 Promise B 以继续链接(我学到了新东西!)。
function promiseB() {
return new Promise((resolve) => {
console.log('Promise B execution');
resolve(); // adding this solved it
});
}
队列片段:
promiseA().then((condition) => {
if (condition) {
return promiseB();
}
}).then(finalPromise).then(() => {
console.log('final promise success');
}).catch(() => {
console.log('final promise failure');
});