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()