如何将 Promise 'then' 的值发送到 'catch'?

zer*_*r09 1 javascript json ipc promise

我只是想问catch如果解析上的值不是预期的,我应该如何传递解析承诺。

例如

let prom = getPromise();

prom.then(value => {
    if (value.notIWant) {
        // Send to catch <-- my question is here, I want to pass it on the catch.
    }

    // Process data.
}).catch(err => {
    // Pass the error through ipc using json, for logging.
});
Run Code Online (Sandbox Code Playgroud)

我尝试使用throw,但对象无法解析为 json,只是得到一个空对象。

回答:

@BohdanKhodakivskyi 下面的第一条评论是我想要的答案。

@31py 答案也是正确的,但 @BohdanKhodakivskyi 解决方案要简单得多,并且会呈现相同的结果。

Boh*_*kyi 6

只需使用throw value;. 在你的情况下:

prom.then(value => {
    if (value.notIWant) {
        // Send to catch
        throw value;
    }

    // Process data.
}).catch(err => {
    // Pass the error through ipc using json, for logging.
});
Run Code Online (Sandbox Code Playgroud)

Promise.reject()另请注意使用和之间的区别和限制,throw这在这个问题中得到了完美的描述。例如,throw在某些情况下将不起作用async