Почему rxjs concat выдает разные значения при передаче и массив вместо отдельных аргументов? - PullRequest
0 голосов
/ 07 мая 2019

Документы rxjs утверждают, что оператор concat может принимать отдельные аргументы наблюдаемых или массив. Когда я передаю индивидуальные аргументы, я получаю то, что ожидаю. Наблюдаемая, возвращаемая из concat, имеет все значения из каждой наблюдаемой в наблюдаемой, которую она возвращает последовательно, как и должно быть. Вот пример с отдельными параметрами, и он работает как ожидалось:

        var str: string = "";
        var obs1: Observable<string> = of("hello");
        var obs2: Observable<string> = of("world");
        concat(obs1, obs2).subscribe(
            s => str += s as string + " ",
            err => {},
            () => str.trim()
        )        

Когда это запустится, str будет "hello world"

Когда я передаю массив наблюдаемых, он возвращает [объект объекта] для каждого значения вместо значения наблюдаемой. Может кто-нибудь сказать мне, почему это и как получить concat, работающий с массивом? Вот приведенный выше пример использования массива:

        var str: string = "";
        var strBuild: Observable<string>[] = [];
        strBuild.push(of("hello"));
        strBuild.push(of("world"));
        concat(strBuild).subscribe(
            s => str += s as string + " ",
            err => {},
            () => str.trim()
        )        

Когда это запустится, str будет "[объект объекта] [объект объекта]"

Что мне здесь не хватает? Заранее спасибо за поиск.

1 Ответ

1 голос
/ 07 мая 2019

Я считаю, что s все еще можно наблюдать, поскольку strBuild - это массив из 2 Observable, а не Observable из массива строк.Возможно, есть лучшие варианты, но есть возможность подписаться на каждое наблюдаемое: в concat() примерно так:

concat(strBuild).subscribe(
    s => s.subscribe(e => str += e + " "), //s is an Observable so we need to subscribe
    err => {},
    () => str.trim()
)         

Я просто объясняю причину различий в ваших примерах, но я 'я уверен, что есть лучший подход для построения массива строк с Observables

...