reactjs - 拒绝 Promise.all
问题描述
我有一个 aysnc 函数,它获取数据并返回Promise.all
ie的值
const fetchDownloadMenuData = async selectedItems => {
return Promise.all(
selectedItems.map(async item => {
try {
if (item.id === 'interviewGuide') {
const interviewGuide = await positionCandidatesService.getCandidate(
positionId,
candidateSelected.id
);
return interviewGuide.interviewGuide;
}
if (item.id !== 'overview' && item.id !== 'profile') {
const outcome = await outcomesService.get(candidateSelected.id, item.id);
return outcome;
}
return null;
} catch (err) {
appInsights.trackException({
error: new Error(`Error fetching candidate outcome: ${JSON.stringify(err)}`)
});
return null;
}
})
)};
我这样称呼这个函数:
try {
downloadData = await fetchDownloadMenuData(selectedItems);
} catch (err) {
appInsights.trackException({
error: new Error(`Could not fetch all PDF data: ${JSON.stringify(err)}`)
});
return;
}
但它永远不会被捕获。为什么是这样?如果所有的承诺都没有解决,我如何让它拒绝?
谢谢
解决方案
您不是在拒绝map...catch block
,而是在退回null
. 这就是为什么Promise.all
无法捕获异常的原因。您需要throw
在 catch 块中使用,记住,throw
将终止执行流程。
像这样试试
selectedItems.map(async item => {
try {
...async stuff
} catch (err) {
appInsights.trackException({
error: new Error(`Error fetching candidate outcome: ${JSON.stringify(err)}`)
});
throw err OR throw new Error(err) <-- this is missing earlier.
}
})
推荐阅读
- docker - Docker + docker-compose up + 无法启动服务
- sql - 在从现有表中插入时使用列名作为参数
- swiftui - 文本更改后列表未更新
- php - #1064 - 'SELECT (M_ID FROM matieres WHERE LABEL =' Anglais'))' 在第 2 行附近的语法错误
- geopandas - geopandas 循环没有给我层的名称
- python - Python:通过 inharitence 共享“静态”变量
- javascript - 如何将链接添加到句子数组?
- android - Android Google Cast 通知禁用
- c - 为什么使用固定长度分配而不是静态分配?
- python - 如何绘制使用scipy包中的solve_ivp求解python中的一组微分方程后获得的图形