配列を持っていますが、値の型は無関係です。私がしたいのは、x秒ごとに1つの値を出すことです。その値を持つ関数を呼び出すと、その関数が何らかの理由で失敗した場合は、y秒後に再試行します(単純な定数、ここではインクリメンタルなものは必要ありません) 。私はここにかかわらず、これまでRxJSはx秒ごとに配列から値を出力し、その値を持つ関数を呼び出し、失敗した場合は再試行します。
Rx.Observable
.interval(500)
.take(arr.length)
.map(idx => arr[idx])
.flatMap(dt => randomFunc(dt))
.catch(e => conosle.log(e))
.retry(5)
.subscribe();
function randomFunc(dt) {
return Rx.Observable.create(observer => {
if (dt === 'random') {
return observer.error(`error`);
} else {
return observer.next();
}
});
}
2の問題点を持っている何
:
1:randomFunc
がエラーを返した場合、それは全体のチェーンをやり直すようです。私は失敗した人だけが再試行する必要があります。
2:catch
エラーで再試行したように見えますが、実際にはエラーは記録されません。唯一失敗したものを再試行することを見えたが、それでもすべてのエラーを記録し、私はしませんでした
Rx.Observable
.interval(500)
.take(arr.length)
.map(idx => arr[idx])
.switchMap(dt => randomFunc(dt)
.catch(e => conosle.log(e))
.retry(5)
)
.subscribe();
この方法:私はこのようなswitchMap
の代わりflatMap
を試みた最初の問題については
確かにswitchMap
はここで良いです(私は本当にRXのnoobです)。
ありがとうございます、ありがとうございます!
コンソールのスペルが間違っているため、「キャッチ」がログに記録されない可能性があります:-) conosle => console – Ashley