Javascript 捕获与承诺相关的错误
我不熟悉JavaScript Promises,所以我肯定我做错了什么。您能否指出与使用Angular 2处理Java脚本承诺相关的最佳实践是什么 以下是我用于认证的承诺:Javascript 捕获与承诺相关的错误,javascript,angular,typescript,Javascript,Angular,Typescript,我不熟悉JavaScript Promises,所以我肯定我做错了什么。您能否指出与使用Angular 2处理Java脚本承诺相关的最佳实践是什么 以下是我用于认证的承诺: 身份验证(用户:对象):承诺{ 返回新承诺((解决、拒绝)=>{ 让body=JSON.stringify({email:user['email'],password:user['passwords']['password'],repeatPassword:user['passwords']['repeatPassword
身份验证(用户:对象):承诺{
返回新承诺((解决、拒绝)=>{
让body=JSON.stringify({email:user['email'],password:user['passwords']['password'],repeatPassword:user['passwords']['repeatPassword']});
let headers=新的头({'Content-Type':'application/json'});
let options=newrequestoptions({headers:headers});
返回this.http.post(`this.webApiService.webservicedaddress}/users/register`,body,options)
.订阅((响应:响应)=>{
//如果响应中有jwt令牌,则登录成功
控制台日志(“工作”);
让user=response.json();
if(user&&user.token){
此.setSession(user.token);
}
返回用户;
}
,(错误:任意)=>{
控制台日志(“XXXXXX错误”);
返回误差;
});
/*() => {
});*/
})
@Maximus指出了大量与角度相关的参考,这帮助我实现了我所追求的目标。以下是一个有效的解决方案,以防有人会寻找类似的解决方案:
“authentication.service.ts”:
private-extractData(res:Response){
让body=res.json();
返回body.data |{};
}
私有句柄错误(错误:响应|任意){
//在现实世界的应用程序中,您可能会使用远程日志记录基础设施
让errMsg:string;
if(响应的错误实例){
const body=error.json();
const err=body.error | | JSON.stringify(body);
errMsg=`${error.status}-${error.statusText | |'''}${err}`;
}否则{
errMsg=error.message?error.message:error.toString();
}
控制台错误(errMsg);
返回可观察抛出(errMsg);
}
验证(用户:对象):可观察{
让body=JSON.stringify({email:user['email'],password:user['passwords']['password'],repeatPassword:user['passwords']['repeatPassword']});
let headers=新的头({'Content-Type':'application/json'});
let options=newrequestoptions({headers:headers});
返回this.http.post(`this.webApiService.webservicedaddress}/users/register`,body,options)
.map(此.extractData)
.接住(这个.把手错误);
}
您正在混合反应式编程和承诺。使用其中任何一种。忘记承诺,使用反应式编程。告诉您如何做到这一点您在控制台日志中看到11111了吗?您是否意识到您在验证中返回的承诺从未得到解决或拒绝?这意味着.then和.catch之后都没有<代码>this.authenticationService.authenticate(值)
将被执行它展示了如何处理来自承诺的可观察错误,你基本上需要使用来推荐
操作符。让我们知道它是否对你有效Great reference@Maximus,基于这一点,我能够实现我所寻找的,谢谢你决定不使用承诺?也许可以在o答案,因为现在它似乎是承诺相关问题的答案