如果满足条件,则添加序列承诺

时间:2018-01-15 01:08:21

标签: javascript promise

我有一个承诺, Promise A ,它会检查'某些情况是异步的。它始终被解决(没有拒绝),因此只需要thenresolve为真或假(前述条件)。

如果第一个承诺中未满足条件(resolve(false)),则执行第二个承诺 Final Promise 。但是,如果符合初始条件(resolve(true)),则会在两个': Promise B 之间执行其他承诺。

Diagram of what I'm saying

因为 Final Promise 会产生两个回调(thencatch),我正在尝试避免代码重复。这就是我正在使用的,它有效,但最终的回调是重复的。

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中是否有解决方案。

1 个答案:

答案 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');
});