将诺言转换为可观察值时如何展平嵌套可观察值

时间:2019-04-01 01:37:37

标签: angular typescript ionic-framework

我对可观测对象还比较陌生,但仍然想办法解决。
我在使用此功能时有些挣扎。它将promise转换为可观察的ok,但结果返回一个嵌套的可观察的信号,因此我不得不调用subscribe两次。

如何将其展平以仅返回一个可观察到的?

注意:我花了很多时间来研究其他stackoverflow问题,但是还没有得到答案,或者也许我只是没有得到答案。 我也尝试过用mergeMap替换switchMap。

 removeItem(id: string) {
  let updatedDefectReports: DefectReport[];
      const userId = this.authService.user.uid;
      return from(firebase.auth().currentUser.getIdToken().then(tokenData => {
        const token = tokenData;
        return this.defectReports.pipe(
          take(1),
          switchMap(defectReports => {
            updatedDefectReports = defectReports;
            const updatedDefectReportIndex = defectReports.findIndex(x => x.id === id);
            updatedDefectReports.splice(updatedDefectReportIndex, 1);
            return this.http.delete<any>
            (`https://defect-report-1cbe3.firebaseio.com/defect-report/${userId}/${id}.json?auth=${token}`);
          }),
          tap(() => {
            this._defectReports.next(updatedDefectReports);
          })
        );
      }));
    }

onRemoveItem(defectReport: DefectReport, slidingItem: IonItemSliding) {
    this.defectReportService.removeItem(defectReport.id).subscribe(res => {
            res.subscribe(() => {
            }, error => {
              this.notificationService.presentAlert('Problem Removing', 'Unable to remove item');
            });
          });
}

0 个答案:

没有答案
相关问题