2017-02-25 202 views
0

我正在阅读一本名为Angular 2 Cookbook的教科书。在第四章中有一个链接的承诺部分,其具有下面的代码JavaScript承诺链接

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

没有什么在这个例子中,这将是具体到角。 – estus

+0

好吧,测试一下,看看会发生什么。书有时是错的。 outerResolve的这种用法,不是从传递给promise构造函数的回调函数内部解析,而是显示出对本书中承诺缺乏理解。 –

+0

好的我正在测试它 –

回答

1

书中的代码将正确记录为;

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);

+0

你是对的,显然我把这三行看作是评论(使用kindle电子书)是错误的。我想我会删除我的问题 –

1

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

如果父承诺解决了,那么它触发子承诺解决。所以发生以下事情。

  1. 的firstPromise应解决及其处理程序(在这种情况下2)应该被称为输出0和0,因为该处理程序没有链接。

  2. 然后secondPromise应该得到解决,其处理程序应该被称为输出1

  3. 然后thirdPromise应该得到解决,因为它没有处理什么都不会被输出。