javascript - 返回值和从函数返回 Promise.resolve() 之间的区别

标签 javascript promise

我无法理解当我们简单地返回一个值或当我们返回 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.

所以有(至少)两种不同的场景:

在任何旧函数中

如果它只是任何旧函数(不是 thencatch 回调),那么区别在于 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;

thencatch回调中

I am trying to understand how promises chaining works.

在那种情况下,您是在谈论 return value;return Promise.resolve(value);thencatch 回调。这很简单:在 thencatch 回调中 return Promise.resolve(value); 根本没有意义,这是多余的和不必要的开销;只需使用返回值;

thencatch 总是返回 promise 。如果您的回调返回一个简单值 (return value;),则 promise 会用该值实现。如果您的回调返回一个 thenable(松散地,一个 promise ;例如,return Promise.resolve(value);),那么 then 返回的 promise >/catch is resolved to that thenable:当 thenable 被解决时,promise 以同样的方式被解决。 (如果您的 thencatch 回调抛出错误,promise 将因该错误而被拒绝。)

如果您要在回调中启动一个新的异步进程,则有充分的理由从 thencatch 回调中返回 promise ;但是,如果您已经准备好一个立即值,那么将它包装在一个 promise 中是没有意义的——thencatch 已经这样做了。

关于javascript - 返回值和从函数返回 Promise.resolve() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47279054/

相关文章:

php - 在 Colorbox 中使用 jQuery

javascript - 如何使用 javascript 和 json 查找组的所有叶子

javascript - javascript中的递归 promise

javascript - 在 Bootstrap 中设置默认下拉值

javascript - 如何表示面包屑 child ?

javascript - 编写嵌套 Promise javascript es6

javascript - 如何使用 Promise.promisify 确保正确的 "this"?

javascript - 处理 Angular Promise 中的错误

javascript - 如何让后面的 Promise 等待第一个 Promise 在 bluebird 中完成?

javascript - 将不同的颜色应用于动态生成的 HTML 表格行