处理 HTTP 请求失败

Handle HTTP request failing

本文关键字:失败 请求 HTTP 处理      更新时间:2023-09-26

我有一个http服务器的请求:

this.http.post('http://192.168.1.45:3000/testrestapi', 'user=username', {
    headers: headers
  })
  .retry(1)
  .timeout(5000)
  .map(res => res.json())
  .subscribe(data => {
    console.log('response is ready');
  }), (err) => {
    console.log('error + ', err);
  }, () => {
    console.log('Done http request');
  };

如果请求失败,我希望重试 1 次。我还希望请求在 5 秒后超时。我需要知道重试和超时是否都失败了,以便我可以处理它。

使用上面的代码,我似乎无法处理它。例如,如果请求经历了 2 次重试,我需要知道它已经进行了,以便我可以适当地处理。我以为它会出现在"错误"部分,但控制台日志根本没有打印。

首先:你迷失在括号里...subscribe应用程序必须在回调后关闭:

this.http.post('http://192.168.1.45:3000/testrestapi', 'user=username', {headers: headers})
  .timeout(3000, new Error('timeout exceeded'))
  .map(res => res.json())
  .retry(1)
  .subscribe(data => {
    console.log('response is ready');
  }, (err) => {
    console.log('error + ', err);
  }, () => {
    console.log('Done http request');
  });

为了防止此类错误,TSLint 可以提供帮助。在这种情况下,我得到:

TSLint:预期的赋值或函数调用(无未使用的表达式(

第二retry呼叫必须在map呼叫之后进行。

您可以尝试以下操作来处理重试:

this.http.post('http://192.168.1.45:3000/testrestapi', 'user=username', {
  headers: headers
})
    .retryWhen(error => error.delay(500))
    .timeout(2000, () => return new Error('delay exceeded'))
    .map(res => res.json())
    .subscribe(data => {
      console.log('response is ready');
    }, (err) => {
      console.log('error + ', err);
    }, () => {
      console.log('Done http request');
    });

如果没有retryWhen,重试将立即执行...

有关更多详细信息,请参阅此链接:

  • https://jaxenter.com/reactive-programming-http-and-angular-2-124560.html