然后,一个Promise调用另一个Promise,而内部的Promise从捕获.then块中的外部一个进程中返回
我在这里和Google进行了一般搜索。 试图使用一个简单的尝试..赶上。但不能与诺言
一起使用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);
});
}
答案 0 :(得分:3)
在内部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
确实需要在遇到错误时能够执行特定的操作,而外部呼叫者需要在发生错误时能够执行 else 的操作同样也遇到错误,可以选择有两个catch
,但是在大多数情况下,只要可以正确处理错误,就可以只有一个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;
})
}
答案 1 :(得分:0)
.catch
旨在处理错误,因此之后,promise链将继续与下一个.then
继续。要继续下一个.catch
,您必须从throw
内部重新.catch
错误或返回被拒绝的承诺。