我发现了一个关于 Promise 的有趣的事情。当我运行以下代码时,它给出了“aa”的输出,而不是“bb”,这让我很困惑。有谁明白为什么并给出解释吗?谢谢!
Promise.resolve('aa')
.then(Promise.resolve('bb'))
.then(console.log);
好吧,你滥用了.then()
处理程序,因此您没有得到所需的答案也就不足为奇了。
A .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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)