2017-08-29 30 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然後處理它

你的第二個例子基於相同的概念。