我向服务器发出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');
};
如果请求失败,我希望重试一次请求。我还希望请求在5秒后超时。我需要知道重试和超时是否都失败了所以我可以处理它。
使用上面的代码我似乎无法处理它。例如,如果请求经历了2次重试,我需要知道它已经完成,所以我可以适当地处理。我认为它会出现在“错误”部分,但控制台日志根本不会打印出来。
答案 0 :(得分:1)
首先:您在括号中丢失... 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:期望赋值或函数调用(no-unused-expression)
<强>第二强>:
retry
来电必须在map
来电之后。
答案 1 :(得分:1)
您可以尝试以下方法来处理重试:
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
,立即执行重试......
有关详细信息,请参阅此链接: