首页 > 解决方案 > Angular 服务从回调函数返回 observable

问题描述

我正在使用Angular 8

在我的服务中,我使用了一个接受回调函数并在回调函数中给出值的库。

我的服务方式是

raw(qrInfo, res?): Observable<string> {

  return manager.getData(res.width, (res1) => {
    return of<string>(res1);
  });
}

我想订阅此raw()方法并res1在控制器中获取结果

constructor(
  private myS: MyService
) {}

data() {
  this.myS.raw(info, op).subscribe(res => {
    console.log(res);                              // Get value here
  }
}

但这不起作用。如何从回调函数返回 observable?

标签: angularrxjsobservableangular-services

解决方案


您可以按照此 文档在 raw() 方法中创建一个新的 Observable,以将回调结果发送到您的 Observable。

raw(qrInfo, res?): Observable<string> {
  /** Returns the freshly created Observable **/
  return Observable.create(function(observer) {
    /** Call your method with the callback **/
    manager.getData(res.width, (res1) => {
      /** Emit the callback response to the Observable **/
      observer.next(of<string>res1)
      /** Complete the Observable to close it **/
      observer.complete();
    });
  });
}

推荐阅读