then()方法中的Promise.resolve不传递其已解析的值

时间:2017-03-01 18:33:58

标签: es6-promise

我发现了对Promise的兴趣。当我运行以下代码时,它给了我'aa'的输出与'bb'相反,这让我很困惑。有人理解为什么并给出解释吗?谢谢!

Promise.resolve('aa')
.then(Promise.resolve('bb'))
.then(console.log);

1 个答案:

答案 0 :(得分:4)

好吧,你误导了.then()处理程序,所以你没有得到想要的答案就不足为奇了。

应该向.then()处理程序传递函数引用。你传递的是一个尽职尽责的承诺,因为它不是一个可调用的函数。

执行此操作时:

.then(Promise.resolve('bb'))

立即执行Promise.resolve('bb')并将返回结果(这是一个承诺)传递给.then()。因此,当您传递函数引用时,您将承诺传递给.then()。如果您将代码更改为此代码,那么您将得到您期望的结果:



Promise.resolve('aa')
    .then(function() {return Promise.resolve('bb');})
    .then(console.log);




请记住,将内容传递给.then()的重点是,当父承诺解决/拒绝时,它可以执行。因此,为了实现这一点,您必须传递一个函数引用,该引用可以在稍后的时间由promise基础结构调用。

使用ES6语法,您可以缩短到:

Promise.resolve('aa')
  .then(_ => Promise.resolve('bb))
  .then(console.log);