【发布时间】:2019-06-19 16:35:38
【问题描述】:
有没有办法等待订阅调用返回的第一个值?
例如,在下面:
async getValue(...) {
myObs$ = ...
let val = await myObs$.pipe(first()).toPromise()
myObs$.subscribe(val => {
this.value = val
})
return val
}
异步函数将返回一个 val 的 Promise,但我还想订阅并获取一个数据成员值,该值将在可观察的 myObs$ 发出新值时更新。
我的问题:是否可以在不使用 first() 调用的情况下返回 Promise 并等待我第一次在 subscribe 中得到结果?
【问题讨论】:
-
订阅后可以切换顺序使用
await myObs$.pipe(first()).toPromise()。 -
调用
toPromise会隐式订阅调用它的 observable。 -
我应该说上面的代码有效,但我遇到的问题与我获得两次值有关,一次用于 first() 行,然后在订阅中。我正在尝试确定是否可以等待订阅然后返回它,但也继续更新任何未来更新的值。
-
为什么要等待 observable 发出一个值?当您第一次收到
subscribe中的值时,您可以调用一个函数。这将是一种被动的方式。 -
我需要同步的值,也想缓存值(并保持更新),这样我就不必再去服务器了。唯一真正的问题是我必须在上面的代码中两次访问服务器,并希望避免额外的调用。
标签: rxjs