2016-08-23 35 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";