Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获与承诺相关的错误_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 捕获与承诺相关的错误

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

我不熟悉JavaScript Promises,所以我肯定我做错了什么。您能否指出与使用Angular 2处理Java脚本承诺相关的最佳实践是什么

以下是我用于认证的承诺:

身份验证(用户:对象):承诺{
返回新承诺((解决、拒绝)=>{
让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答案,因为现在它似乎是承诺相关问题的答案