typescript - 在异步调用中订阅 Observable 不起作用 [Angular2]

标签 typescript angular2-services angular2-observables

我的 service.ts 中有一个方法 getData(),如下所示。这将返回一个 Observable。另一个服务 ApiService 也有一个方法 get() 也返回一个 Observable。

    getData(args, parentKey?):any {
        return new Observable(observer => {
            this.apiService.get(args).subscribe(
                response => {
                    observer.next({
                        data: response['data'],
                        status: ($.isEmptyObject(response) ? false : true) 
                    });
                },
                error => console.log("error : ", error),
                () => console.log("finished")
            );
        });
    }

我正尝试在从我的组件发出的异步 API 调用中重用此 getData() 方法。见下文:

this.myService.getData({
    url: 'apiUrl1',
    method: 'Method1',
    parameters: {}
}).subscribe(response => {
    if (response['status']) {
        console.log('Processed apiUrl1');
    }
});
this.myService.getData({
    url: 'apiUrl2',
    method: 'Method2',
    parameters: {}
}).subscribe(response => {
    if (response['status']) {
        console.log('Processed apiUrl2');
    }
});
this.myService.getData({
    url: 'apiUrl3',
    method: 'Method3',
    parameters: {}
}).subscribe(response => {
    if (response['status']) {
        console.log('Processed apiUrl3');
    }
});

错误: 但是发生的是 getData-observable 总是被订阅到 apiUrl3。

我需要单独订阅每个 getData()。有人可以帮帮我吗?

预期结果:

Processed apiUrl1

Processed apiUrl2

Processed apiUrl3

最佳答案

不确定您的问题出在哪里,但这更清楚,也许会奏效。

getData(args, parentKey?):any {
    this.apiService.get(args)
        .map(response => {
                data: response['data'],
                status: ($.isEmptyObject(response) ? false : true)
        })
        .do(() => console.log("finished"))
        .catch(error => console.log("error : ", error));
}

关于typescript - 在异步调用中订阅 Observable 不起作用 [Angular2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603989/

相关文章:

angular - 如何使用 Observables Angular 4.x 监控 http 请求的持续时间

typescript - 将对象转换为 KV 值数组

reactjs - 使用 Nextjs + React Context 和 TypeScript 时,类型子元素缺少属性

angular - 手动更改路由参数导致用户界面不一致

angular - 在不订阅的情况下使用 Angular 2 http.post?还是我想错了?

javascript - 如何将数组从 observable 映射到另一个数组

.net - RxJS/Rx.Net 可观察订阅与事件 - 性能/线程

reactjs - 通过键在 typescript 中使用 react 组件动态访问对象

javascript - 示例node.js ftp 服务器?

angular - 订阅方法不对更改使用react[Angular 2]