为什么以及何时使用Promise.resolve?
据我所知,Promises用于表示异步操作的成功/失败。当我查看我的一个项目时,所有函数都将最终结果包装在'Promise.resolve'中。我不明白,在'Promise.resolve'中包含所有函数结果有什么用。这里有用例吗?
例如,所有功能都在下面的模板中。
process = (data) => {
//Perform some operations.
return Promise.resolve(result);
}
回答如下:
使用Promise.resolve
的唯一原因是转换一个可能是承诺的承诺的值。
Promise.resolve(value)
是一种方便的方法,做new Promise(resolve => resolve(value)
。如果值是一个promise,它将被返回,如果它是来自userland promise库的promise,它将被转换为本机promise。如果它是一个普通值,它将被转换为履行该值的承诺。
Promise.resolve(5); // returns a promise fulfilled with the number 5.
这在几种情况下很有用,例如: - 如果函数可能返回一个promise,它应该总是返回一个promise - 例如,如果你有一个缓存值,它可能需要是Promise.resolve
d。 - 如果有多个功能实现,而另一些是同步的 - 它会创建一个统一的接口。
请注意,在实践中使用async
函数时,不再需要这么多,因为异步函数总是返回一个promise - 即使你return
是一个普通值(实际上,无论你从异步函数返回的是隐式的Promise.resolve
d)。
还要注意,特别是如果它们所做的只是同步计算,你不应该让函数返回promises,因为返回promise的函数意味着JavaScript中的I / O.