Concat испускает два потока через поток, одно за другим завершено, это не то, что вам нужно.
Слияние будет генерировать оба события одинаковым образом, но в том порядке, в котором они действительно завершатся, а не в том, что вам нужно.
То, что вы хотите, это значение обоих элементов в одном и том же поточном событии.Это будут делать forkJoin, zip и integraLatest, когда вы запутываетесь в том, что все они выдают массив значений, к которым вы не обращаетесь должным образом при подписке.
zip испускает каждый раз, когда все элементы, упакованные вместе, испускают последовательно, поэтому, если наблюдаемый 1 испускает 1,2,3, а наблюдаемый два испускает 4,5;выбросы из почтового индекса будут [1,4], [2,5].
Объединение последнего будет излучать каждый раз, когда излучается, поэтому вы получите что-то вроде [1,4], [2,4], [2,5], [3,5] (в зависимости от точного порядка излучения).
Наконец, forkJoin испускает только один раз, после того, как каждый элемент внутри него фактически завершен, a и затем завершает себя.Это, вероятно, то, что вы хотите больше всего на свете, так как вы, похоже, «экономите».если ни один из этих примеров потоков не завершится, forkJoin никогда не выдаст, но если они оба завершат работу после своего окончательного значения, forkjoin выдаст только одну эмиссию: [2,5].Я предпочитаю это, поскольку это «самая безопасная» операция, которая гарантирует, что все потоки завершаются правильно и не создают утечек памяти.И обычно при «сохранении» вы ожидаете только одну эмиссию, поэтому она также более явная.Когда бы вы ни увидели forkJoin, вы знаете, что имеете дело с одним потоком эмиссии.
Лично я бы сделал это следующим образом:
obs1: Observable<int>;
obs2: Observable<Boolean>;
save(): Observable<any> {
return forkJoin(obs1, obs2);
}
service.save().subscribe(([first, second]) => {
console.log(first); // int e.g. 1000
console.log(second); // Boolean, e.g. true
});
Typescript предоставляет такой синтаксис для доступа кэлементы в массиве известной длины, но невозможно действительно создать несколько аргументов в функции успеха подписки, поскольку ее интерфейс принимает только один аргумент.