.then应该在函数体内返回最后的承诺吗?

时间:2018-07-31 15:29:01

标签: javascript

所以问题很简单-.then是否应在函数体内返回最后的诺言?

例如:

Promise.resolve().then(function() {
  Promise.resolve(1)
  Promise.resolve(2)
}).then(function(val) {
  return val;
})

当承诺解决时,它是否应返回最后一个值(2)?

我正在处理一些旧代码,这种构造在某些模块中非常普遍,但是不起作用。

2 个答案:

答案 0 :(得分:1)

这不应该起作用,因为第一个返回的是未定义的承诺。

也许您应该看看Promise.all() https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

答案 1 :(得分:0)

  

.then应该返回函数体内的最后一个诺言吗?

不。函数(包括then回调)应在函数体内返回 all 承诺。也就是说,除非您explicitly want to ignore some of them

当然,一个函数只能返回一个值,因此它只能返回一个promise。如果您要执行多项操作,则一个接一个地执行它们,并兑现您的承诺,或者一次执行它们,然后使用Promise.all做出一个等待所有结果的承诺。

还要注意.then(function(val) { return val; }) is pointless and should be dropped