从包含订阅和另一个可观察变量的函数中返回可观察变量

时间:2020-08-20 22:38:52

标签: angularjs firebase rxjs observable observers

我正在尝试获取连接到我的应用程序的打印机状态。这是我在页面之一中提供的功能:

checkPrinterStatus() { //I want to this this function into an observable
    this.afdb.object('food/settings/printer').snapshotChanges().subscribe((res: any) => {
      const printerSettings = res.payload.val();
      if(printerSettings.isConnected) {
        timer(5000, 3000).pipe(
          switchMap(_ => this.getConnPrinterStatus()),
          distinctUntilChanged()
        ).subscribe(async res => {
          let printerStatus = res;
          return printerStatus; // I want this to be an observable
        });  
      }
    });
    
  }

因此,基本上,我正在订购我的Firebase数据库,该数据库为我提供了有关打印机是否已连接/设置的价值。如果已连接,我将创建一个轮询,在其中调用我的getConnPrinterStatus(),如果更改了状态,则每三秒钟会向我返回一次状态。

现在,当前,我在页面之一中具有此功能,但是我想将此功能变为可观察的,以便可以将其放在服务之一中,然后在每页中订阅printerStatus值。我该如何实现?任何帮助或指示,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

checkPrinterStatus() { //I want to this this function into an observable
  return this.afdb.object('food/settings/printer').snapshotChanges().pipe(
    switchMap(res => iif(() => res.payload.val().isConnected, timer(5000, 3000).pipe(
        switchMap(_ => this.getConnPrinterStatus()),
        distinctUntilChanged()
      )
    ))
  );
}

此函数返回一个可观察的

答案 1 :(得分:0)

您可以像这样从函数[返回一个可观察对象-

checkPrinterStatus

由于该函数返回一个可观察值,因此调用方可以通过该方法订阅可观察的返回值。