RXJS在拍摄后显示错误

时间:2018-01-23 06:08:59

标签: angular rxjs

在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(错误)??

1 个答案:

答案 0 :(得分:3)

retryWhen next每个complete通知表示它会尝试重新订阅其来源Observable。任何errorretryWhen通知都会进一步传递。所以你想做的是,当你已经做了两次尝试时,你只想进一步发送错误。

将错误传递到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();
    }
}