可观察的first()并订阅

时间:2019-01-25 20:06:29

标签: rxjs

有没有办法等待订阅呼叫返回的第一个值?

例如,在下面:

set main to "https://meet.google.com/"
set extra to "xxx-xxxx-xxx"
do shell script "open " & main & extra & " -a Chrome"

异步函数将返回val的Promise,但我也想订阅并获取一个数据成员值,该值将在可观察到的myObs $发出新值时进行更新。

我的问题:是否有一个返回Promise的方法,而不用first()调用来调用该行,而只是等到我第一次在Subscribe中得到结果时?

1 个答案:

答案 0 :(得分:0)

这里并没有真正的理由,因为调用方无论如何都要等待它或使用.then(),因此该方法不需要异步。您可以将其重写为:

getValue(...) {
  myObs$ = ...
  myObs$.subscribe(val => {
    this.value = val
  })
  return myObs$.pipe(first()).toPromise()
}

这将保留您的内部订阅并允许其继续接收值,而getValue的调用者将收到第一个发出的值的承诺。