【发布时间】:2018-01-10 00:24:39
【问题描述】:
我有一个带有一些方法的服务,它们中的大多数都需要完成某个回调才能完成它的工作。使用 Promises,在伪中,很容易做到这一点:
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 的类似解决方案竞争。
Promises 会记住该值并知道它是否已解决。一个 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 的用法?
【问题讨论】:
-
“由于我在做一个 Angular 项目,首选的方式是全力以赴的 Observables” 首选谁?有什么依据?还有哪些支持数据?
-
@T.J.Crowder 我将编辑我的陈述,因为它可能是主观的,但我已经看到它提到了几个地方。 stackoverflow.com/questions/37364973/…
-
我很快就投票赞成关闭 - 我需要一个带有 Observables 的解决方案,措辞可以(并且已经)改变,因此不再基于意见。
-
“Ore Observables 真的是 Promises 的一个很好的替代品吗”,从表面上看,是在征求意见。 (顺便说一句,这不是我的近距离投票。) 如果问题真的是“我如何使用 Observables 而不是 Promises?”我会编辑问题标题来说明这一点。我还会进行编辑以使其更加简洁。 (并且在 SO 答案中表达意见的人不具备支持数据的合理理由。)
-
@T.J.Crowder 好点,标题已更改。
标签: javascript angular promise es6-promise reactivex