2016-09-28 87 views
1

在我的課堂我同時包含同步和異步代碼,類似的功能:如何拒絕同步和異步代碼功能的承諾?

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部分後續錯誤將提高catchfoo功能的用戶。但第一個投擲(在if部分)不會,爲了趕上這個我將不得不在try/catch中使用foo

如果我把它放在then部分之內,我怎麼能爲返回的承諾提出錯誤? (不使用bluebird並拒絕Resolver

請讓我知道是否有遺漏。

在此先感謝您的幫助。

回答

1

所以我已經發現了存在於這實際上不正是我一直在尋找的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; 
    }); 
} 
+0

我們體會到自答案拋出一個錯誤!請同時添加關於爲什麼選擇此解決方案的詳細信息,這是否意味着「退回」被拒絕的承諾? –

+0

完成,希望覆蓋它:) –