在Angular 2中,我使用rxjs进行HTTP调用。目前,它设置为显示错误如下。
this.http.get("http://www.someapifunction.com/api" , {headers: headers, params: data})
.map(res => res.json())
.subscribe(
data => {
console.log(data);
},
err => {
console.log('error',err);
this.showError(err);
},
() => console.log('Request Complete')
);
如果出现错误,代码将运行一个显示错误消息的函数。
我现在要做的是实现rxjs retryWhen +在打印错误消息之前运行代码2次。如下:
this.http.get("http://www.someapifunction.com/api" , {headers: headers, params: data})
.readyWhen(errors => errors.delay(5000).take(2))
.map(res => res.json())
.subscribe(
data => {
console.log(data);
},
err => {
console.log('error',err);
this.showError(err);
},
() => console.log('Request Complete')
);
我遇到的问题是一旦API重试失败两次它没有运行错误功能。我需要做什么才能运行错误的函数,即this.showErr(错误)??
答案 0 :(得分:3)
retryWhen
next
每个complete
通知表示它会尝试重新订阅其来源Observable。任何error
和retryWhen
通知都会进一步传递。所以你想做的是,当你已经做了两次尝试时,你只想进一步发送错误。
将错误传递到next
回调中作为error
通知返回的Observable,以便您有条件地将它们转换为.retryWhen(errors => errors
.map((err, index) => {
if (index === 2) {
throw err;
}
return err;
})
.delay(5000))
。
你可以这样做:
public function toggledeliver(Request $request,$orderId){
$address=Address::find($orderId);
if($request->has('delivered')){
$address->delivered=$request->delivered;
}else{
$address->delivered="0";
}
$address->save();
$order=Order::find($orderId);
if($request->has('delivered')){
$order->delivered=$request->delivered;
}else{
$order->delivered="0";
}
$order->save();
return back();
}
}