服务器不可用时,如何正确处理http发布请求?

时间:2018-10-30 13:38:41

标签: javascript angular angular7

当服务器不可用时,如何处理正确的http发布响应?

现在我发送如下请求:

    this.requestMethods.SendCurrentStep(this.formRegister.currentForm().index).subscribe(() => {
       // TODO
    });

// Code below is not executed father

方法是:

public SendCurrentStep(step: number): Observable<any> {
    return this.http.post('https://localhost:9090/NotAvailableUrl', {
      'step' : step
    })
      .map(res => (<any>res)._body === '' ? {} : res)
      .catch(this.handleError);
  }

2 个答案:

答案 0 :(得分:2)

如果您的服务器不可用,则最多this.requestMethods.SendCurrentStep(this.formRegister.currentForm().index) .subscribe( (sucessResponse) => { // TODO your stuff with returned data }, (errorResponse) => { // Here if the response is falsey -i.e: code = 500 / 404 ... } ); 个通知您。

.catch(this.handleError);

您无需在应用程序的正面实现任何东西,只需确保从后端以及响应中正确发送了响应代码状态。 检查here和整个页面)以获取更多信息。

PS :删除.map(res => (<any>res)._body === '' ? {} : res),我认为和for i in num_list: if(i < len(num_list) - 1 and num_list[i] == num_list[i+1]): count = count + 1 else: count = count 一样,因为不确定这意味着什么。

答案 1 :(得分:0)

您需要从第一个订阅中抛出错误,因此第二个订阅会收到该错误。像这样...

public SendCurrentStep(step: number): Observable<any> {
    return this.http.post('https://localhost:9090/NotAvailableUrl', {
      'step' : step
    })
      .map(res => (<any>res)._body === '' ? {} : res)
      .catch((error) =>
    {
       Observable.throw(this.handleError(e)))
    });
  }

然后,您可以在第二个订阅中以相同的方式捕获它

this.requestMethods.SendCurrentStep(this.formRegister.currentForm().index).subscribe(() => {
       // TODO
    }).catch((error) => {
   Console.log("There was a problem sending this request");
});

那是你的意思吗?如果您要说的是如何确定服务器已关闭,而不是出现内部服务器错误或请求无效,那么您将无法做到。您可以使用响应代码吗?