繁体   English   中英

JavaScript承诺中的链接

[英]Chaining in JavaScript Promises

我正在阅读一本名为《 Angular 2 Cookbook》的教科书。 在第4章中,有一个链接的Promises部分,其中包含以下代码

 const incr = val => { console.log(val); return ++val;}; var outerResolve; const firstPromise = new Promise((resolve,reject) => { outerResolve = resolve;}); firstPromise.then(incr); const secondPromise = firstPromise.then(incr); const thirdPromise = secondPromise.then(incr); outerResolve(0); 

显示的输出是

//0 0 0 1 1 2

//According to me output should be 0 0 1

有人可以解释书中给出的结果以及我对这个重要概念的理解中的错误吗?

本书示例中显示的输出不正确。 正确的输出是0 0 1。

如果父母承诺得到解决,那么它将触发子女承诺得到解决。 因此发生以下情况。

  1. 由于解决方案未链接,因此应解析firstPromise并调用其处理程序(在这种情况下为2)输出0和0。

  2. 然后,应该解决seco​​ndPromise,并将其处理程序称为输出1。

  3. 然后,thirdPromise应该被解析,并且由于它没有处理程序,因此不会输出任何内容。

本书中的代码将正确记录为:

0
0
0
1
1
2

但是,您还没有完整分析示例。 您在问题中提供的摘录只是其中的一半。 本书中的示例代码如下:

 const incr = val => { console.log(val); return ++val;}; var outerResolve; const firstPromise = new Promise((resolve,reject) => { outerResolve = resolve;}); firstPromise.then(incr); const secondPromise = firstPromise.then(incr); const thirdPromise = secondPromise.then(incr); outerResolve(0); secondPromise.then(incr); firstPromise.then(incr); thirdPromise.then(incr); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM