Ответ 1
Если вы хотите быть уверены, что порядок эмиссии такой же, как и порядок, в котором вы указали Наблюдаемые источника вы можете использовать concat
или concatMap
операторов.
Операторы concat*
подписываются на Observable только после завершения предыдущего Observable (он также работает с Promises, см. Http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObservableInputDoc.html).
В вашем случае это будет выглядеть следующим образом:
import { concat } from 'rxjs'; // Note, concat from 'rxjs', is not the same as concat from 'rxjs/operators'
concat(printLog1, printLog23, printLog4);
... или с concatMap
если запрос на одно Обещание зависит от ответа от предыдущего Обещания:
printLog1.pipe(
concatMap(response => ...),
concatMap(response => ...),
);
... или когда порядок не имеет значения, вы можете использовать функцию merge
которая немедленно подписывается на все наблюдаемые/обещания и пересылает их результаты по мере их поступления:
merge(printLog1, printLog23, printLog4);
Январь 2019: обновлено для RxJS 6