异步函数内的 Promise.resolve()

Chr*_*ian 0 javascript promise

我不久前在某处读到过一个帖子,其中使用静态Promise方法(例如Promise.resolve()函数内部或Promise.reject()内部)async是反模式,但我似乎找不到它。

鉴于以下情况:

const asyncFunc = async (foo) => {
    if (foo) return Promise.resolve()

    return Promise.reject()
}
Run Code Online (Sandbox Code Playgroud)

这被认为是反模式吗?

Cer*_*nce 5

使用Promise.resolveis 或许与其说是一种反模式,不如说是完全不必要的,因为从异步函数返回一个普通值将导致 Promise 返回解析为该值。

if (foo) return Promise.resolve()
Run Code Online (Sandbox Code Playgroud)

相当于

if (foo) return;
Run Code Online (Sandbox Code Playgroud)

if (foo) return Promise.resolve(5)
Run Code Online (Sandbox Code Playgroud)

相当于

if (foo) return 5;
Run Code Online (Sandbox Code Playgroud)

所以你不妨放弃Promise.resolve.

Promise.reject有点不同。如果你想拒绝函数返回的 Promise,你可以这样做throw <expression>,或者你可以这样做return Promise.reject<expression>- 两者都是等效的,而且我不认为在所有情况下都有任何具体的理由选择其中之一(尽管我会更喜欢,throw因为它更简洁)。