2016-08-23 33 views
0

我從一個組件內部調用一個服務方法,它返回一個Promise。我想根據承諾是否得到解決或拒絕來做不同的事情。我做這樣的:在離子頁面返回Promise.reject

調用服務方法的功能

onAddProvider() { 
    this.userInteraction.addContact(data.email, 'bp').then(
    successMessage => { 
     doSomething(); 
    }, 
    failureMessage => { 
     doSomethingElse(); 
    }); 
} 

服務方法

addContact(email: string, type: string) { 
    return new Promise((resolve, reject) => { 
    if (!email.match(patterns.email)) { 
     return Promise.reject('Bad email address'); 
    } 

    let data = { 
     to: email, 
     from: this.dataStorage.data.id, 
     type: type, 
     date: new Date().getTime() 
    }; 

    this.http.post(`${serverURL}action=sendAddRequest&token=${localStorage['token']}`, JSON.stringify(data)) 
     .map((res: Response) => res.text()) 
     .subscribe(response => { 
     resolve('Request sent'); 
     }); 
    }); 
} 

我期待failureMessage功能,當運行無極.reject返回,但是我卻在控制檯中得到這個錯誤:

EXCEPTION: Error: Uncaught (in promise): Bad email address 

回答

1

替換:

return Promise.reject('Bad email address'); 

return reject('Bad email address'); 
+0

我已經試過了,但我得到了同樣的錯誤 –

+0

@AlexandruPufan這是正確的答案,其實。你能用這種修正方法重新創建問題嗎? 'Promise.reject('錯誤的電子郵件地址')'創建未被捕獲的承諾,不會調用'reject','then'永遠不會被觸發。 「拒絕」是相反的(它不應該被退回)。 – estus

+0

你說得對,我的錯誤是在其他地方 –

0

它也可以拒絕拋出一個錯誤。

throw "Error";