Http 角度2-检查来自订阅的服务器错误

Http 角度2-检查来自订阅的服务器错误,http,angular,subscribe,Http,Angular,Subscribe,我觉得这个场景应该在Angular 2文档中,但我在任何地方都找不到 下面是一个场景 提交在服务器上无效的表单(创建对象) 服务器返回一个400错误请求,表单上显示错误 订阅返回后,我想检查一个错误变量或其他东西(即,如果没有错误>则路由到新创建的详细信息页面) 我想象它是这样工作的: this.projectService.create(project) .subscribe( result => console.log(result), erro

我觉得这个场景应该在Angular 2文档中,但我在任何地方都找不到

下面是一个场景

  • 提交在服务器上无效的表单(创建对象)
  • 服务器返回一个400错误请求,表单上显示错误
  • 订阅返回后,我想检查一个错误变量或其他东西(即,如果没有错误>则路由到新创建的详细信息页面)
  • 我想象它是这样工作的:

    this.projectService.create(project)
        .subscribe(
            result => console.log(result),
            error => {
                this.errors = error
            }
        ); 
    }
    
    if (!this.errors) {
        //route to new page
    }
    

    我对Angular 2很陌生,所以这可能是因为我不了解可观测物体是如何工作的。我对在表单上显示这些数据没有问题,但我不知道如何在ts组件中查看这些数据。我真的只想检查http创建的成功/失败。

    如相关RxJS文档中所述,如果没有错误,可以使用在完成时调用的第三个参数

    供参考:

  • [onNext]
    函数
    ):为可观察序列中的每个元素调用的函数
  • [onError]
    函数
    ):在可观察序列异常终止时调用的函数
  • [onCompleted]
    函数
    ):在可观察序列正常终止时调用的函数
  • 因此,您可以在
    onCompleted
    回调中处理路由逻辑,因为它将在正常终止时被调用(这意味着调用它时不会有任何错误)


    作为旁注,还有一个在完成时调用的,不管调用的成功/失败。如果您总是希望在HTTP请求之后执行某些逻辑,而不管结果如何(例如,出于日志记录目的或某些UI交互,例如显示模式),那么这可能会有所帮助

    Rx.Observable.prototype.finally(动作)

    在源可观察序列正常或异常终止后调用指定的操作

    例如,以下是一个基本示例:

    import { Observable } from 'rxjs/Rx';
    import 'rxjs/add/operator/finally';
    
    // ...
    
    this.httpService.getRequest()
        .finally(() => {
          // Execute after graceful or exceptionally termination
          console.log('Handle logging logic...');
        })
        .subscribe (
          result => {
            // Handle result
            console.log(result)
          },
          error => {
            this.errors = error;
          },
          () => {
            // No errors, route to new page
          }
        );
    

    您可以通过以下方法实现

        this.projectService.create(project)
        .subscribe(
            result => {
             console.log(result);
            },
            error => {
                console.log(error);
                this.errors = error
            }
        ); 
    }
    
    if (!this.errors) {
        //route to new page
    }
    

    在我找到的所有关于观测值错误处理的答案中,这是最好的一个。非常感谢。
        this.projectService.create(project)
        .subscribe(
            result => {
             console.log(result);
            },
            error => {
                console.log(error);
                this.errors = error
            }
        ); 
    }
    
    if (!this.errors) {
        //route to new page
    }