Javascript 什么';处理承诺拒绝的正确方法是什么,以便函数退出?
假设我有以下代码:Javascript 什么';处理承诺拒绝的正确方法是什么,以便函数退出?,javascript,async-await,promise,Javascript,Async Await,Promise,假设我有以下代码: function doSomething() { const foo = await new Promise((resolve, reject) => { //... reject(); }).catch(error => { //I'd like to exit the doSomething function since the promise rejected return;//
function doSomething() {
const foo = await new Promise((resolve, reject) => {
//...
reject();
}).catch(error => {
//I'd like to exit the doSomething function since the promise rejected
return;//This only exists the this arrow funtion
});
console.log('Should not get to here if foo rejects');
}
如果foo
返回一个被拒绝的承诺,那么我想退出doSomething()
,但上面的代码不这样做。相反,由于捕获了错误
,代码将继续
如果我没有捕获被拒绝的承诺,那么我会得到一个错误:未处理的PromisejectionWarning
:
function doSomething() {
const foo = await new Promise((resolve, reject) => {
//...
reject();
});
console.log('Should not get to here if foo rejects');
}
我知道我能做到,但这让我感觉很混乱:
function doSomething() {
let exitFunction = false;
const foo = await new Promise((resolve, reject) => {
//...
reject();
}).catch(error => {
//I'd like to exit the doSomething function since the promise rejected
exitFunction = true;
});
if (exitFunction) {
return;
}
console.log('Should not get to here if foo rejects');
}
那么,处理这种事情的最佳方式是什么?能够做到这一点很好:
function doSomething() {
const foo = await new Promise((resolve, reject) => {
//...
reject();
});
if (foo.rejected) {
return;
}
console.log('Should not get to here if foo rejects');
}
甚至这个:
function doSomething() {
const foo = await new Promise((resolve, reject) => {
//...
reject();
}).catch(error => {
return function2;//Sort of like JS's `break loop2;`
});
console.log('Should not get to here if foo rejects');
}
其他人是否感觉到我的痛苦,如果是的话,最好(最干净)的处理方法是什么?如果你在
异步函数中处理承诺,我建议使用try/catch
函数promiseFunc(){
返回新承诺((解决、拒绝)=>{
//...
拒绝(“错误!”);
});
}
异步函数doSomething(){
试一试{
const foo=wait promiseFunc();
}捕捉(错误){
控制台日志(err);
返回;
}
log(“如果foo拒绝,则不应到达此处”);
}
doSomething()
如果您在异步函数中处理承诺,我建议使用try/catch
函数promiseFunc(){
返回新承诺((解决、拒绝)=>{
//...
拒绝(“错误!”);
});
}
异步函数doSomething(){
试一试{
const foo=wait promiseFunc();
}捕捉(错误){
控制台日志(err);
返回;
}
log(“如果foo拒绝,则不应到达此处”);
}
doSomething()代码>我想你只是误解了返回的位置
在第一个代码中
return
返回到foo
这就是为什么它一直持续下去
您可以只使用foo来捕获这样的返回结果
异步函数doSomething(){
让foo=等待新的承诺((解决、拒绝)=>{
拒绝();
}).catch(错误=>{
返回false;
});
if(!foo)返回console.log(“拒绝并停止”);
log('如果foo拒绝,则不应到达此处');
}
doSomething()
我想你只是误解了返回的位置
在第一个代码中
return
返回到foo
这就是为什么它一直持续下去
您可以只使用foo来捕获这样的返回结果
异步函数doSomething(){
让foo=等待新的承诺((解决、拒绝)=>{
拒绝();
}).catch(错误=>{
返回false;
});
if(!foo)返回console.log(“拒绝并停止”);
log('如果foo拒绝,则不应到达此处');
}
doSomething()