如何拒绝同步和异步代码函数中的承诺?

How to reject a promise in a function of both sync and async code?

在我的 class 中,我得到了一个包含同步和异步代码的函数,例如:

export class SomeClass(){
    constructor(){
    }

    foo(a: SomeDataClass): Promise<void>{
        if(!a){
            throw new Error('a is undefined');
        }

        return doSomething(a.value).then(()=>{
            console.log('done');
        }).catch((error)=>{
            throw error;
        });
    }
}

export class SomeDataClass(){
    public value: number;
    public name: string;

    constructor(){
    }
}

catch 部分抛出以下错误会为 foo 函数的用户引发 catch。但是第一次抛出(在 if 部分)不会,为了抓住这个我将不得不在 try/catch.

中使用 foo

如果我不在 then 部分内抛出返回的承诺,我怎么会引发错误? (不使用 bluebird 并拒绝 Resolver

如有遗漏,请告诉我。

在此先感谢您的帮助。

所以我发现 Promise 上有一个 reject 函数,它实际上做的正是我正在寻找的,它引发了一个错误,它作为 Promise 错误而不是像常规 throw 那样在 try/catch.

中捕获

返回它与在 Promise.then 链中抛出错误相同

foo(a: SomeDataClass): Promise<void>{
    if(!a){
        return Promise.reject('a is undefined'); //<----- Promise.reject
    }

    return doSomething(a.value).then(()=>{
        console.log('done');
    }).catch((error)=>{
        throw error;
    });
}