我发现了一个关于 Promise 的有趣的事情。当我运行以下代码时,它给了我与 'bb' 相反的 'aa' 输出,这让我很困惑。有谁明白原因并解释一下吗?谢谢!
Promise.resolve('aa')
.then(Promise.resolve('bb'))
.then(console.log);Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 13
好吧,您正在滥用.then()处理程序,因此您没有得到所需的答案也就不足为奇了。
一个.then()处理程序应传递一个函数引用。您正在向它传递一个承诺,它会尽职尽责地忽略它,因为它不是一个可调用的函数。
当你这样做时:
.then(Promise.resolve('bb'))
Run Code Online (Sandbox Code Playgroud)
Promise.resolve('bb')立即执行并将返回结果(这是一个承诺)传递给.then(). 所以,.then()当你应该传递一个函数引用时,你传递了一个承诺。如果您将代码更改为此,那么您将得到您所期望的:
.then(Promise.resolve('bb'))
Run Code Online (Sandbox Code Playgroud)
请记住,将某些内容传递给的重点.then()是它可以在父承诺解决/拒绝时稍后执行。因此,为了使之成为可能,您必须传递一个函数引用,该函数引用可以在以后由 Promise 基础设施调用。
使用 ES6 语法,您可以缩短为:
Promise.resolve('aa')
.then(_ => Promise.resolve('bb))
.then(console.log);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4184 次 |
| 最近记录: |