Вызывая n раз одну и ту же наблюдаемую - PullRequest
0 голосов
/ 20 января 2019

У меня есть http get webservice, который мне нужно вызывать n раз, добавляя возврат моего последнего вызова каждый раз (при первом значении по умолчанию), как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете использовать оператор расширения из rxjs.Он будет зацикливаться до тех пор, пока не будет предоставлено значение empty ().Вот пример:

import { empty } from 'rxjs';
private service; <--- service that gives us the observable by some value
private initialValue: number = 5;
private counter: number = 0;
private source$: Observable<number> = this.service.getSourceWithValue(initialValue);

source$.pipe(
   expand(value => isCounterExceeded()
                   ? incrementCounterAndGetNextSourceObservableWithValue(value);
                   : empty()
   );
// if counter is not exceeded we will increment the counter and create another
// observable based on current value. If it is exceeded, we are stopping the loop by 
// returning the empty() observable

private incrementCounterAndGetNextSourceObservableWithValue(value: number): Observable<number> {
    this.counter++;
    return this.service.getSourceWithValue(value);
}

private isCounterExceeded() {
   return this.counter >= 4;
}
0 голосов
/ 20 января 2019

Похоже, вы могли бы использовать expand:

const N = 4;

const source = of(1).pipe(
  expand((previous, index) => index === 4 ? EMPTY : of(previous * 2))
);

source.subscribe(console.log);

Живая демоверсия: https://stackblitz.com/edit/rxjs-fcpin2

...