Angular 已跳过订阅后结果
在Angular 8应用程序中,我有以下方法:Angular 已跳过订阅后结果,angular,https,subscribe,Angular,Https,Subscribe,在Angular 8应用程序中,我有以下方法: onSubmit(){ 此.mailService.sendMessage().subscribe( (res:any)=>{ 此.toastr.success('messagesent'); 这是resetForm(); }, 错误=>{ 此.toastr.error('消息未发送',res.status); } ); } sendMessage()函数位于服务组件中,如下所示: sendMessage(){ 返回this.http.post(
onSubmit(){
此.mailService.sendMessage().subscribe(
(res:any)=>{
此.toastr.success('messagesent');
这是resetForm();
},
错误=>{
此.toastr.error('消息未发送',res.status);
}
);
}
sendMessage()
函数位于服务组件中,如下所示:
sendMessage(){
返回this.http.post(environment.apident+environment.messageController,this.mailMessage);
}
http
是@angular/common/http
中的HttpClient
对象
令人难以置信的是,res
总是被跳过,无论服务器通信的成功与否,事实上,res.status
您在err
lambda prints 200中可以看到,这是与服务器成功交易的代码,我已经检查过了,但还是打印了它,只是为了确保
除此之外,服务器成功接收并管理post,这是200OK响应所期望的
有人能告诉我这是怎么回事吗?为什么
res
似乎被忽略了?您的代码不完整。您需要映射结果。像这样的
import { catchError, map } from 'rxjs/operators';
sendMessage(){
return this.http.post(environment.apiEndpoint +
environment.messageController, this.mailMessage).pipe(
map((result) => result), catchError(err => throwError(err))
)
};
这将改变成功的结果
注意:如果您的应用程序没有全局错误处理。你需要抓住错误
可能是您的后端正在响应错误,状态代码为200。检查服务器以确保。您应该在错误处理程序中打印出
err
,不确定res
来自何处,似乎是某个全局变量集。@tkausl,这是一个局部变量,我编辑以强调这一点。我已经多次使用这种方法,这是我第一次得到这种结果。它是第一个箭头函数的局部函数,在第二个箭头函数中不可用。因此,它从其他地方获得了res
。@tkausl,这是rxjs订阅方法工作的硬件,这里是原型:Observable.subscribe(下一个?:(值:对象)=>void,error?:(错误:任意)=>void,complete?:()=>void):订阅
或使用sendMessage().pipe(catchError(err)=>{…})
并仅在状态不是200时抛出错误。这应该允许只使用订阅错误处理程序来处理您认为是实际错误的响应。