我发现了对Promise的兴趣。当我运行以下代码时,它给了我'aa'的输出与'bb'相反,这让我很困惑。有人理解为什么并给出解释吗?谢谢!
Promise.resolve('aa')
.then(Promise.resolve('bb'))
.then(console.log);
答案 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);