【问题标题】:How to reject a promise in a function of both sync and async code?如何在同步和异步代码的函数中拒绝承诺?
【发布时间】:2017-02-06 06:34:58
【问题描述】:

在我的课堂上,我得到了一个同时包含同步和异步代码的函数,例如:

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

如果有什么遗漏请告诉我。

提前感谢您的帮助。

【问题讨论】:

    标签: javascript promise try-catch bluebird throw


    【解决方案1】:

    所以我发现Promise 上有一个reject 函数,它实际上完全符合我的要求,它引发了一个错误,它用作Promise 错误而不是像常规的throwtry/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;
        });
    }
    

    【讨论】:

    • 感谢您的自我回答!还请添加有关您选择此解决方案的原因的详细信息,return 被拒绝的承诺意味着什么?
    • 完成,希望能很好地涵盖它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2018-09-07
    • 2021-07-16
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多