为什么以及何时使用 Promise.resolve?

Har*_*hna 1 javascript node.js promise

据我所知,Promise 用于表示异步操作的成功/失败。当我查看我的一个项目时,所有函数都将最终结果包装在“Promise.resolve”中。我不明白,将所有函数结果包装在“Promise.resolve”中有什么用。这里有任何用例吗?

例如,所有功能都遵循以下模板。

process = (data) => {
  //Perform some operations.
  return Promise.resolve(result);
} 
Run Code Online (Sandbox Code Playgroud)

Ben*_*aum 5

使用的唯一原因Promise.resolve是将可能是承诺的值转换为承诺。

Promise.resolve(value)是一种方便的方法,可以做到new Promise(resolve => resolve(value). 如果值是一个承诺,它将被返回,如果它是来自用户空间承诺库的承诺,它将被转换为原生承诺。如果它是一个普通值,它将被转换为用该值实现的承诺。

Promise.resolve(5); // returns a promise fulfilled with the number 5.
Run Code Online (Sandbox Code Playgroud)

这在几种情况下很有用,例如: - 如果一个函数可能返回一个承诺,它应该总是返回一个承诺 - 例如,如果你有一个缓存的值,它可能需要Promise.resolved。- 如果有多个功能实现并且有些是同步的 - 它会创建一个统一的接口。

请注意,在async函数的实践中,不再需要这么多了,因为异步函数总是返回一个承诺——即使你return是一个普通的值(事实上,无论你从异步函数返回什么都是Promise.resolve隐式的)。

另请注意,特别是如果函数所做的只是同步计算,则不应让函数返回承诺,因为返回承诺的函数意味着 JavaScript 中的 I/O。