Как я могу выполнить массив Observables в последовательности, выполняя следующее только после завершения предыдущего Observable? [Дубликат]

1

Скажем, я динамически создаю массив наблюдаемых:

let obsArray = dataArray.map((data) => observableFunc(data))

Я хочу выполнить каждую из этих наблюдаемых в порядке, выполняя obsArray [n + 1] только после того, как obsArray [n] завершит. Выполнение следующего наблюдаемого НЕ зависит от результата предыдущего наблюдения.

После того, как все наблюдаемые в массиве завершены, я хочу вернуться из функции, которая обрабатывает этот массив наблюдаемых.

По сути, я хотел бы найти такой метод, как forkJoin, который обеспечивает последовательное выполнение.

  • 0
    Я читаю это, поскольку подпись concat () не принимает массивы. Глядя на это еще раз, может я ошибался? РЕДАКТИРОВАТЬ: не имеет значения, он не примет массив наблюдаемых
  • 0
    Этот вопрос отличается от вопроса, помеченного как уже имеющий ответ. Этот вопрос о массиве наблюдаемых, а не автономных наблюдаемых. У меня та же проблема с запуском массива наблюдаемых в последовательности.
Теги:
angular
rxjs
asynchronous
observable

1 ответ

5

Как уже упоминалось, оператор concat может выровнять испускаемые значения в строке. Вы можете передать массив наблюдаемых на него следующим образом (спасибо для оператора ES6 spread!):

const obsArray = [
  Rx.Observable.of(1, 2, 3), 
  Rx.Observable.of(4, 5, 6), 
  Rx.Observable.of(7, 8, 9)];

const example = Rx.Observable.concat(...obsArray);
// or using old apply method
// Rx.Observable.concat.apply(this, obsArray); 

// prints: 1,2,3,4,5,6,7,8,9
const subscribe = example.subscribe(val => console.log(val));
  • 0
    Это не работает при использовании функции для предоставления значения для оператора concat.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню