我无法理解当我们简单地返回一个值或当我们返回 Promise.resolve()
时会发生什么从一个函数。具体来说:我正在尝试了解 promises chaining 的工作原理。我正在链接方法并验证值是否达到最后一次调用 then
的方法中.我只想了解将 promise 返回给 then
之间的区别, 返回 Promise.resolve()
至 then
, 并只返回一个值给 then
.
最佳答案
I have problem in understanding that what happens when we simply return a value or when we return
Promise.resolve()
from a function.
所以有(至少)两种不同的场景:
在任何旧函数中
如果它只是任何旧函数(不是 then
或 catch
回调),那么区别在于 return value;
直接返回值,而 return Promise.resolve(value);
返回一个 promise 用该值实现。它改变了调用代码使用结果的方式。在 return value;
的情况下,调用代码直接使用它。在 return Promise.resolve(value);
的情况下,调用代码需要使用 promise ,就像任何其他 promise 一样(并且不能假设 promise 已经解决,即使它是).
如果该函数是一个 promise 链的开始,您可以使用 return Promise.resolve(value);
。 (这有一些用例;例如,如果函数可能需要也可能不需要启动异步过程:在不需要的分支中,您仍然会返回一个 promise ,因为分支必须做某事异步必须返回一个 promise 。)如果不是,您只需使用 return value;
。
在then
或catch
回调中
I am trying to understand how promises chaining works.
在那种情况下,您是在谈论 return value;
与 return Promise.resolve(value);
在 then
或catch
回调。这很简单:在 then
或 catch
回调中 return Promise.resolve(value);
根本没有意义,这是多余的和不必要的开销;只需使用返回值;
。
then
和 catch
总是返回 promise 。如果您的回调返回一个简单值 (return value;
),则 promise 会用该值实现。如果您的回调返回一个 thenable(松散地,一个 promise ;例如,return Promise.resolve(value);
),那么 then
返回的 promise >/catch
is resolved to that thenable:当 thenable 被解决时,promise 以同样的方式被解决。 (如果您的 then
或 catch
回调抛出错误,promise 将因该错误而被拒绝。)
如果您要在回调中启动一个新的异步进程,则有充分的理由从 then
或 catch
回调中返回 promise ;但是,如果您已经准备好一个立即值,那么将它包装在一个 promise 中是没有意义的——then
和 catch
已经这样做了。
关于javascript - 返回值和从函数返回 Promise.resolve() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47279054/