2017-08-29 31 views
0

我刚刚走过一个好奇的承诺。 如果我直接在一个链中拒绝,我可以在后面看到这个变量。承诺拒绝没有传递到捕获,如果存储在变量

如果我拒绝该变量,我根本无法理解。许是始终认为,在这种情况下,要解决:

let proMISS = Promise.resolve(); 
 
proMISS.then(() => console.log('THEN 1')) 
 
     .then(() => Promise.reject()) 
 
     .then(() => console.log('THEN 2')); 
 

 
setTimeout(() => { 
 
    proMISS.catch(() => console.log('CATCH')); 
 
}, 1000);

这的确是不工作:

let PROmiss = Promise.resolve() 
 
        .then(() => console.log('THEN 1')) 
 
        .then(() => Promise.reject()) 
 
        .then(() => console.log('THEN 2')); 
 

 
setTimeout(() => { 
 
    PROmiss.catch(() => console.log('CATCH')); 
 
}, 1000);

这似乎并没有被确定性

回答

1

我刚刚找到答案。

变量中的承诺已解决,但链并非如此。 因此,如果你抓住这个变量,它必须得到解决。

每次添加成员时,您都必须保存链的最后一个成员。

1

你基本上做

let promise1 = Promise.resolve(); 
let promise2 = promise1.then(() => console.log('THEN 1')) 
     .then(() => Promise.reject()) 
     .then(() => console.log('THEN 2')); 
setTimeout(() => { 
    promise1.catch(() => console.log('CATCH')); 
    promise2.catch(() => console.log('CATCH')); 
}, 1000); 

是,promise1promise2不同。第一个是undefined,而第二个被拒绝。

0

let proMISS = Promise.resolve(); 
 
let promissTwo = proMISS.then(() => console.log('THEN 1')) 
 
     .then(() => Promise.reject()) 
 
     .then(() => console.log('THEN 2')); 
 

 
setTimeout(() => { 
 
    promissTwo.catch(() => console.log('CATCH')); 
 
}, 1000);
你需要采取的第一个应许链的输出变量,然后才可以处理排斥反应。我把 proMISS连锁店的产量输入一个新变量 promissTwo然后处理它

你的第二个例子基于相同的概念。