Javascript 使用wait时使用catch处理承诺拒绝
我正在使用Javascript 使用wait时使用catch处理承诺拒绝,javascript,error-handling,async-await,promise,Javascript,Error Handling,Async Await,Promise,我正在使用wait使代码更干净,但我不确定是否正确处理异常 使用azure devops节点api时的示例 const foo = async() => { return new Promise((resolve, reject) => { ... ... const teams = await coreApiObject.getTeams(currProject.id) .catch
wait
使代码更干净,但我不确定是否正确处理异常
使用azure devops节点api时的示例
const foo = async() => {
return new Promise((resolve, reject) => {
...
...
const teams = await coreApiObject.getTeams(currProject.id)
.catch(err => { reject(err) return })
...
...
})
}
在这段代码中,我假设,如果promise调用有问题,foo()将返回reject。
异步
函数总是返回一个promise,所以您不需要自己显式创建一个。从异步函数返回的任何非承诺值都隐式包装在承诺中
在foo
函数中,您只需等待调用coreApiObject.getTeams(…)
,要捕获并处理任何错误,请使用try catch
块
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
您的代码可以简化为如下所示:
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (e) {
// handle error
}
}
如果希望调用代码来处理错误,则可以使用以下选项之一:
- 删除
try catch
块,只返回coreApiObject.getTeams(…)
的结果
删除try catch
块并仅返回对coreApiObject.getTeams(…)
的调用将允许调用代码处理错误,因为foo
函数返回的承诺将解析为coreApiObject.getTeams(…)返回的承诺
:这意味着foo
函数返回的承诺的命运将取决于coreApiObject.getTeams(…)
返回的承诺发生了什么变化
如果由coreApiObject.getTeams(…)
返回的承诺被拒绝,则由foo
函数返回的承诺也将被拒绝,因此调用代码将进行更改以捕获承诺拒绝并处理它
- 从
catch
块抛出错误
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
您需要从catch
块抛出错误,以确保async
函数返回的承诺被拒绝;如果从catch
块返回值,则async
函数返回的promise将解析为catch
块返回的任何值
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
异步
函数总是返回一个承诺,因此您不需要自己显式创建一个承诺。从异步函数返回的任何非承诺值都隐式包装在承诺中
在foo
函数中,您只需等待调用coreApiObject.getTeams(…)
,要捕获并处理任何错误,请使用try catch
块
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
您的代码可以简化为如下所示:
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (e) {
// handle error
}
}
如果希望调用代码来处理错误,则可以使用以下选项之一:
- 删除
try catch
块,只返回coreApiObject.getTeams(…)
的结果
删除try catch
块并仅返回对coreApiObject.getTeams(…)
的调用将允许调用代码处理错误,因为foo
函数返回的承诺将解析为coreApiObject.getTeams(…)返回的承诺
:这意味着foo
函数返回的承诺的命运将取决于coreApiObject.getTeams(…)
返回的承诺发生了什么变化
如果由coreApiObject.getTeams(…)
返回的承诺被拒绝,则由foo
函数返回的承诺也将被拒绝,因此调用代码将进行更改以捕获承诺拒绝并处理它
- 从
catch
块抛出错误
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
您需要从catch
块抛出错误,以确保async
函数返回的承诺被拒绝;如果从catch
块返回值,则async
函数返回的promise将解析为catch
块返回的任何值
const foo = async() => {
try {
const teams = await coreApiObject.getTeams(currProject.id);
return teams;
} catch (error) {
// throw the error
throw error;
}
}
您需要将其包装成一个try-catch块您需要将其包装成一个try-catch块您的意思是,如果我将一个函数作为异步函数并返回一个值,那么该值将自动包装成一个promise对象。对吗?在这种情况下,如果我还希望调用方函数处理exceptionmozilla.org说的“一个承诺,它将用异步函数返回的值来解决,或者用异步函数抛出的异常或其中未捕获的异常来拒绝。”查看更新后的答案。您的意思是,如果我使用异步函数并返回一个值,那么该值将自动包装在promise对象中。对吗?在这种情况下,如果我还希望调用方函数处理exceptionmozilla.org说的“一个承诺,它将用异步函数返回的值来解决,或者用异步函数抛出的异常或其中未捕获的异常来拒绝。”请参阅更新的答案。