2017-06-13 80 views
-1

我寫一個單元測試,以確保漁獲以下功能的工作原理:如何築巢的承諾和catch錯誤外承諾

function myFunction(){ 
const myPromises = Promise.all(getMyPromises()) 

return Promise.all(myPromises 
     .then(objArray => { 
     return Promise.all(Promise.map(objArray, 
    doSomethingWithPromises() 
     )).then(response => { 
      getSomeMorePromises() 
      return response; 
     }) 
     .catch(err => { 
        doSomethingWhenErr(); 
       }); 
     }) 
)  .catch(err => { 
doSomethingWhenErr(); 
}); 

}

我無法趕上從錯誤我的單元測試失敗了。

我曾嘗試從內部函數中排除捕獲,但沒有奏效。

如何確保如果在getSomeMorePromises()中未解決承諾,則會返回錯誤並在外部捕獲錯誤?

+1

你'趕上()'回調都是完全無用。刪除它們。 – SLaks

+1

請正確地縮進您的代碼。這是相當難以理解的。 – Bergi

+2

「Promise.all」和「Promise.map」的用法看起來確實是錯誤的。 – Bergi

回答

1

承諾鏈由承諾形成,您從then()回調中返回

僅僅在then()回調中創建一個承諾並不會鏈接到它或以任何方式處理它的錯誤。

您需要返回那些承諾:

function myFunction() { 
    const myPromises = Promise.all(getMyPromises()) 

    return myPromises.then(objArray => { 
     return Promise.all(objArray.map(getOtherPromise)); 
    )).then(response => { 
     return Promise.all(getSomeMorePromises()); 
    }); 
}