【问题标题】:Why and when to use Promise.resolve?为什么以及何时使用 Promise.resolve?
【发布时间】:2019-02-16 22:08:11
【问题描述】:

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

例如,所有的功能都在模板下面。

process = (data) => {
  //Perform some operations.
  return Promise.resolve(result);
} 

【问题讨论】:

标签: javascript node.js promise


【解决方案1】:

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

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

Promise.resolve(5); // returns a promise fulfilled with the number 5.

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

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

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

【讨论】:

  • 你第一句话真的不对。这不是使用Promise.resolve() 的唯一原因,甚至您自己的缓存示例也说明了这一点。有时您已经拥有该值(您知道这不是一个承诺),但需要返回一个解析为该值的承诺。你可以为第一句话选择更好的措辞。
猜你喜欢
  • 2013-06-13
  • 2021-01-24
  • 2013-01-05
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多