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
Angular 已跳过订阅后结果_Angular_Https_Subscribe - Fatal编程技术网

Angular 已跳过订阅后结果

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(

在Angular 8应用程序中,我有以下方法:

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时抛出错误。这应该允许只使用订阅错误处理程序来处理您认为是实际错误的响应。