我对可观测对象还比较陌生,但仍然想办法解决。
我在使用此功能时有些挣扎。它将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');
});
});
}