问题:
this.QueryDictItemList().
then( Promise.all([this.getTypeData(), this.getAssignToList()])
.then(() => {
loading.close();
})).catch(()=>{
loading.close();
})
当getTypeData方法出现异常并抛出后,不会进入catch()。(当然,如果写的是.finally是会进入的)
原因:
promise.all会返回一个新的Promise,这个Promise会在所有传入方法都resolve后resolve或任一方法reject后带有该错误原因。但是promise.all内部的错误不会冒泡到外部链式调用的catch中,除非返回的新的Promise被正确处理。
解决方法:
this.QueryDictItemList().then(() => {
// 使用 Promise.all 等待 getTypeData 和 getAssignToList 都完成
return Promise.all([this.getTypeData(), this.getAssignToList()]);
}).then(() => {
// 两者都成功完成后执行
loading.close();
}).catch((error) => {
// 任何一个 Promise 失败时都会执行到这里
loading.close();
// 可能需要处理错误,例如打印错误到控制台
console.error('An error occurred:', error);
});
如果只是等待 QueryDictItemList
完成后再并行执行 getTypeData
和 getAssignToList
,那么上述代码就是正确的。
如果 QueryDictItemList
的结果对于后续操作是必要的,那么需要在第一个 then
的回调中处理它,并将必要的数据传递给 Promise.all
中的函数。