Должен признать, что я делаю первые шаги с Angular2, и у меня возникает проблема, и у меня возникают проблемы с пониманием. Я использую [email protected], который имеет зависимость от rxjs @ 5.0.0-b.0.Преобразование Angular2 Ответ Http на ConnectableObservable
Мое намерение - сделать HTTP-запрос (службе REST) и разрешить отправку ответа нескольким подписчикам возвращаемого наблюдаемого. Если я правильно понимаю документацию, я могу использовать функцию publish() для преобразования Observable, возвращаемого, например. http.post для ConnectableObservable, зарегистрируйте несколько подписчиков, вызвав ConnectableObservable.subcribe (...) несколько раз, а затем вызовите ConnectableObservable.connect(), чтобы фактически выполнить HTTP-запрос, например. например:
var obs: Observable<Response> = this.http.post(...);
var cobs: ConnectableObservable<Response> = obs.publish();
cobs.subscribe(sub1);
cobs.subscribe(sub2);
cobs.connect();
По крайней мере, мой IDE-шов согласен с этим и не показывает никаких предупреждений. Выполнение кода, я однако получаю следующее сообщение об ошибке:
EXCEPTION: Error during evaluation of "click"
ORIGINAL EXCEPTION: TypeError: obs.publish is not a function
Если я исследую obs
объект в отладчике, только очень небольшое подмножество documented functions действительно доступны. Если я посмотрю на класс implementation of the Observable, только некоторые из документированных функций действительно реализованы. Большинство функций, в том числе функция publish
, объявляются только как сигнатура функции без какой-либо реальной реализации.
Я делаю что-то явно неправильно здесь или я неправильно понял, как работать с наблюдаемыми RxJS?
Если это имеет значение, я строю с глотком, используя npm для разрешения и загрузки зависимостей, включая rxjs/bundles/Rx.js из моего каталога node_modules.
Это была моей первой попыткой, но если вы видите то же поведение, что и я, используя этот код, фактический HTTP-запрос выполняется дважды - один раз для каждого абонента. Это не то, что я хотел. – jarnbjo
О, боже, ты прав! –
Оператор 'share', похоже, является тем, что вы ищете ;-) С его помощью выполняется только один HTTP-запрос ... –