Promise.resolve() 内部异步函数

Promise.resolve() inside async function

我前一段时间在某个地方读到一个 SO 线程,在 async 函数中使用像 Promise.resolve()Promise.reject() 这样的静态 Promise 方法是反模式,但我可以好像没找到

鉴于以下情况:

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

    return Promise.reject()
}

这是否被视为反模式?

使用 Promise.resolve 与其说是 反模式 ,不如说是 完全没有必要 ,因为返回的是普通值来自异步函数的 Promise 将 returns 解析为该值。

if (foo) return Promise.resolve()

相当于

if (foo) return;

if (foo) return Promise.resolve(5)

相当于

if (foo) return 5;

所以你最好不要再 Promise.resolve.

Promise.reject有点不同。如果你想拒绝函数 returns 的 Promise,你可以做 throw <expression>,或者你可以做 return Promise.reject<expression> - 两者是等价的,我认为没有任何具体原因在所有情况下都更喜欢其中之一(尽管我更喜欢 throw 因为它更简洁)。