2017-06-13 78 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()); 
    }); 
}