この観察可能なポーリングは、毎秒getPromise()
の機能をポーリングします。 getPromise()
関数が3つの約束を返すと、それらの解決を停止します。 getPromise()
機能が過去の約束を解決/拒否していないことを検出するにはどうすればいいですか?たとえば2秒とし、onError
ハンドラに電話してください。私はそれをtimeout
オペレータと無駄に動作させるようにしました。何か案は?あなたが唯一の発する最初の観察可能にサブスクライブrace
演算子を使用することができますポーリングを観測可能にする方法不完全な約束を検出する方法
Rx.Observable.interval(1000)
.switchMap(() => Rx.Observable.fromPromise(getPromise()))
.subscribe(onValue, onError);
function onValue(value){
console.log('value: ', value);
}
function onError(error){
console.log('error: ', error);
}
var getPromise = (function(){
var counter = 3;
return function(){
return new Promise(function(resolve, reject){
if(counter > 0) resolve(1);
counter--;
})
}
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.3.0/Rx.js"></script>
ねえ、それは素晴らしいソリューションです!あなたが最初の42を手に入れたら、どのように退会しますか?私はそれらの残りを必要としません。 –
この観測可能な値は、2秒経過しても値が出力されなかった後は、非難されることになっています。 –
@EugeneEpifanov 'timeout()'を使ってエラーを投げる私のアップデートを見てください。実際には、 'timeout()'演算子にRxJS 5.3.0のバグがあるようです。 RxJS 5.2.0では、私が推測するように動作します。最近、 'timeout()'演算子が変更されました。https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md#530-2017-04-03 – martin