2017-10-24 12 views
0

私はretryWhenオペレータを使用することを学んでいますが、retryWhenオペレータが実行する前またはその前にエラーが発生する問題があります。これが私の最初のコードだった:retryWhenオペレータの前にエラーを取得

ngOnInit() { 
    this.subs1 = this.rateService.getClpBtc() 
    .subscribe(prices => { 
     this.clpbtc = prices.ticker.min_ask[0]; 
    }, errors => { 
     if (errors) { 
     this.surbtcErrors = errors; 
     console.log(`The name is: ${errors}`); 
     } 
     else { 
     this.surbtcErrors = null; 
     } 
    }); 
} 

これは罰金働いていたと私はsurbtcErrorsという名前のプロパティでエラーを得ることができます。しかし、私はsubscribe演算子の直前に.retryWhen(errors => errors.delay(5000))を追加しました。エラーがあっても、サブスクライブしている演算子が実行されていないと考えられるため、プロパティが空であることに気付きました(わかりません。私はError: [Object object]を取得しています。このコードで

ngOnInit() { 
    this.subs1 = this.rateService.getClpBtc().retryWhen(function(errors) { 
    if (errors) { 
     console.log(`Error: ${errors}`); 
     errors.delay(5000); 
     return this.surbtcErrors = errors; 
    } else { 
     console.log("SIN ERROR") 
     return this.surbtcErrors = null; 
    } 
    }) 
    .subscribe(prices => { 
    this.clpbtc = prices.ticker.min_ask[0]; 
    }, errors => { 
    if (errors) { 
     this.surbtcErrors = errors; 
     console.log(`The name is: ${errors}`); 
    } else { 
     this.surbtcErrors = null; 
    } 
    }); 
} 

ので、いくつかの研究の後、私はこれを試してみました。だから私の質問は、私がsurbtcErrorsプロパティ内で使用できるようにエラーをどうやって得ることができるのですか?

答えて

2

retryWhen関数に渡される引数は、観測可能なエラーストリームです。この関数は、いつ再試行するかを示す観測可能なストリームを返すことになっています。例errors => errors.delay(500)は、基本的にエラーが発生してから500ms後に再試行するように指示しています。

doを使用すると、エラーが発生したときに副作用を起こすことができます。あなたのケースでは、副作用はあなたのコンポーネントの変数としてエラーを格納しています。

これを行うには、.delayの前に.do(...)句を挿入します。ように:

this.rateService.getClpBtc() 
    .retryWhen(errors => errors 
       .do(error => this.subtcErrors = error) 
       .delay(500)); 
関連する問題