【问题标题】:Rxjs - Call promise and observable sequentiallyRxjs - 依次调用 promise 和 observable
【发布时间】:2017-05-04 19:23:41
【问题描述】:

我想调用一个返回 promise 的函数,然后将结果传递给另一个返回 observable 的函数。我需要按顺序执行此操作并将最终结果作为可观察的,以便我可以订阅。

例如:

// Call a function and return a Promise
myPromise() {}

// Make an http call and return an Observable
myObservable() {}

// Call myPromise() then call myObservable() and return
// an Observable with the result
// *I don't know how this function should be*
myFunction() {}

// Subscription
myFunction().subscribe(
  result => console.log(result),
  error => console.log(error),
  () => console.log('completed'));

我该怎么做?

【问题讨论】:

  • 你有什么问题?也许我误解了你的问题,这似乎很简单。 promiseReturningFunction().then(observableReturningFunction).subscribe(observer) 和在调用 promiseReturningFunction 之前,请确保它是第一次调用。我在这里错过了什么?
  • 您有任何代码示例以便我们为您提供帮助吗?
  • 不需要调用一次,算了。我用一个小示例代码编辑了这个问题。

标签: javascript http promise rxjs observable


【解决方案1】:

您可以执行以下操作:

let stream$ = Observable.defer(() => Observable.fromPromise(myPromise()))
    .flatMap(promiseResult => myObservable(promiseResult));

stream$.subscribe(obsResult => console.log(obsResult));

需要.defer 来确保每次订阅都会调用您的 promise 方法,而不仅仅是在初始化期间调用一次。

【讨论】:

  • 只需在 flatMap 之后添加一个 .catch(...) 即可处理任何先前的错误
  • ...或者您只使用 .subscribe 中的第二个参数,它也会收到任何抛出的错误
猜你喜欢
  • 2018-06-20
  • 2019-05-31
  • 2018-02-05
  • 2017-06-14
  • 2016-12-25
  • 2018-02-19
  • 1970-01-01
  • 2016-12-11
  • 2017-06-14
相关资源
最近更新 更多