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

时间:2017-04-25 07:14:10

标签: typescript angular2-services angular2-observables

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

Collection< PublicationSession > wantedPublications = 
    effectiveDatePublicationMap.values() // Collection<List<PublicationSession>>
                               .stream() // Stream<List<PublicationSession>>
                               .flatMap(list->list.stream()) // Stream<PublicationSession>
                               .filter(pub -> PublicationStatus.valueOf(pub.getPublishStatus()) == PublicationStatus.COMPLETE)
                               .sorted(Comparator.comparing(PublicationSession::getCreateTime))
                               .collect(toMap(p -> p.getPublicationSession().getEffDateTime(), UnaryOperator.identity(), PICK_LATEST))
                               .values();

我正在尝试在异步 API调用中重用此getData()方法,以便从我的组件中进行。见下文:

    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")
            );
        });
    }

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

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

预期结果:

  

已处理的apiUrl1

     

已处理的apiUrl2

     

已处理的apiUrl3

1 个答案:

答案 0 :(得分:0)

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

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));
}