首页 > 解决方案 > 源可观察对象完成时如何取消订阅内部可观察对象

问题描述

我正在尝试实现自动保存功能,其中我在 switchMap 运算符中使用了 switchMap 运算符,即多个嵌套的内部 observable

merge(...eventObservables)
    .pipe(switchMap(({ syncWithServer }) => {
        const source = of(cloneDeep(this.getData()))
            .pipe(tap((data) => this.storageService.storeItem(data.id, {
                data: data,
                synced: false
            })));
        if (syncWithServer) {
            return source.pipe(delay(5 * 1000),
                switchMap((data) =>
                    this.apiService.saveData(data)
                        .pipe(tap(() => this.storageService.storeItem(data.RespondentId, {
                            data: data,
                            synced: true
                        })), tap((response) => response && this.setData(response['Data'], false)))));
        }
        return source;
    }))

上面代码的问题是,当 eventObservables 有新值时,API 请求正在完成而不是取消。有人可以指出这里有什么问题。根据我的理解,当源 observable 被取消订阅(因为我使用了 switchMap 它将取消订阅以前的 observable)switchMap 也将取消订阅内部 observable。如果我理解错了,有人可以指出上面代码中的错误吗?

标签: angularrxjsreactive-programmingrxjs5rxjs6

解决方案


推荐阅读