javascript - 如何修复在前一个承诺的 .then 块中处理的 .catch 中返回的停止承诺。即 .catch 应该留在 .catch
问题描述
然后一个promise调用另一个promise,内部promise从.then块中的catch外部进程返回
我在这里和谷歌搜索过。尝试使用简单的 try.. catch。但不适用于调用承诺
assignResolver(data)
.then(function(resp) {
console.log("map then");
console.log(resp);
})
.catch(function(err) {
console.log("map catch");
console.log(err);
});
export async function assignResolver(data) {
csrf();
return api
.post("/api/task/assignResolver", data)
.then(function(res){
console.log("in api then block");
return res.data;
} )
.catch(function(err) {
console.log("in api then block");
console.log(err);
});
}
解决方案
再次throw
出现错误,在内部时catch
,它将在外部处理catch
,而不是外部处理.then
:
export async function assignResolver(data) {
csrf();
return api
.post("/api/task/assignResolver", data)
.then(function(res){
console.log("in api then block");
return res.data;
} )
.catch(function(err) {
console.log("in api then block");
console.log(err);
throw err;
});
}
但这有点奇怪——通常catch
只在一个地方更有意义。例如,如果assignResolver
确实需要在遇到错误时执行特定操作,并且您的外部调用者也需要在遇到错误时执行其他catch
操作,则可以选择使用两个es,但在大多数情况下,只要可以catch
正确处理错误,您就可以只使用一个。
在这里,除非assignResolver
它自己需要在遇到错误时做些什么,否则catch
完全忽略它:
export async function assignResolver(data) {
csrf();
return api
.post("/api/task/assignResolver", data)
.then(function(res){
console.log("in api then block");
return res.data;
})
}
推荐阅读
- ios - UIAlertController 不会禁用其演示者 UIViewController 的控件
- shortest-path - 初等最短路径问题与最短路径问题
- c# - 向 SOAP 消息添加安全标头
- graphql - Github v4 GraphQL API - 访问 Marketplace 应用结果 (Travis CI)
- reactjs - 嵌套路由链接到两个不同的组件
- azure - 如何使用 GUI 工具浏览 Azure Data Lake gen 2
- javascript - 如何使用 vue.js 嵌套 for 循环遍历两个带有 v-for 的数组
- r - 从向量中递归搜索文件名R
- php - 如何在此代码中格式化“其他”?
- python - Python pandas 转置汇总内容