У меня есть служба с некоторыми методами, большинство из них требуют завершения определенного обратного вызова, прежде чем он сможет выполнять свои функции. С промисами в псевдо это очень легко сделать:
ready = http.get(stuff); // Returns a promise, resolves after a while
methodOne() { // methods sometimes called before promise resolves
this.ready.then(_ => {
// doStuff
});
}
methodTwo() {
return this.ready.then(d => {
// doOtherStuff
});
}
В основном мне нужно делать вещи, только когда я уверен, что сервис готов. На самом деле мне нужно только проверить, готов ли он (что делает methodOne
, просто иллюстрируя с помощью methodTwo
, что также легко добавить больше вещей).
Я хочу попробовать полностью использовать Observables, но в этом конкретном случае мне очень сложно конкурировать с аналогичным решением для Observables.
Обещания запомнят значение и узнают, было ли оно разрешено. Observable несколько сложнее, и кажется, что создать такой же поток проблематично. Мне нужно, чтобы все, что подписывается на Observable, было известно, когда оно будет готово. Иногда метод вызывается рано — до того, как Observable испустит, а иногда поздно, после того, как Observable уже испущен.
У меня есть это прямо сейчас, но это, похоже, не работает:
this.ready$ = someObservable // Will fire after a litle while but never finish - i only need the first to check though.
.publishReplay(1).refCount(); // Trying to replay if subscription comes after emit.
this.ready$.subscribe(_ => {
// This will be called
});
methodOne() {
this.ready$.subscribe(_ => {
// Not called
});
};
Возможно, я неправильно понял использование publishReplay
и refCount
?