【问题标题】:JS Promises: if a handler in a `then` block returns a value vs returning a resolved promise, does the `then` block handle it the same way?JS 承诺:如果 `then` 块中的处理程序返回值与返回已解决的承诺,`then` 块是否以相同的方式处理它?
【发布时间】:2020-08-14 02:40:39
【问题描述】:

假设我有一个函数返回一个这样的已解决承诺:

let a = () => {return new Promise(res => res(1))}

然后我像这样then-ify它:

a()
.then(val => {return new Promise(res => res(1))})

这里的then 包含一个处理程序,它返回一个用1 解析的promise,所以then 块也返回一个用1 解析的promise。对吗?

然后说我们有这个:

a()
.then(val => {return 1})

处理程序返回1,而不是返回使用1 解析的promise。

我想知道的: 在这两种情况下,then 块是否返回一个用 1 解析的承诺,即使一个处理程序返回一个已解决的承诺,而另一个只返回一个价值?换句话说,then 块是否像处理返回值本身的处理程序一样处理返回以值解析的承诺的处理程序?

【问题讨论】:

  • then 不是块,它是一个普通的方法调用。 (没有特殊的语法酱)。它不会“返回一个用 1 解决的承诺”,它返回一个将在 稍后 用一些尚未确定的值解决/拒绝的承诺。
  • 不,它不会以相同的方式处理它们,但是返回一个已经实现的承诺将具有与返回一个普通值相同的最终结果,是的。
  • @Bergi 都明白了^^谢谢!

标签: javascript promise es6-promise


【解决方案1】:

then 块返回的所有值都隐式包装在Promise.resolve 中,因此不需要返回Promise.resolve(1)

【讨论】:

  • 就像,是的,这两者是等价的吗? ^^
  • 是的,它们是等价的。
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 2019-06-16
  • 2020-04-27
  • 1970-01-01
  • 2017-06-06
  • 2019-07-09
  • 1970-01-01
  • 2018-03-10
相关资源
最近更新 更多