为什么我的订阅功能正在打印对象而不是http请求的结果?

时间:2019-01-12 08:34:00

标签: angular typescript asynchronous rxjs

为什么此代码将打印此内容:

Observable {_isScalar: false, source: Observable, operator: MapOperator}

不是我的服务返回的数组?

    const trendingRentals: Observable<any> = this.rentalService.getRentals();
    const commonRentals: Observable<any> = this.rentalService.getCommonRentalsTest();
    const luxuryRentals: Observable<any> = this.rentalService.getLuxuryRentalsTest();

    const concatenation =  concat( [trendingRentals, commonRentals, luxuryRentals]);
    concatenation.subscribe(
      x => console.log(x)
    )

3 个答案:

答案 0 :(得分:2)

此处的 concat 静态运算符接受可观察的作为参数,而不是 Array

如果您传递的是可观察对象数组,则会将嵌套的可观察对象还给您。

阅读互联网以获得更全面的答案,并找到herehere的一些参考文献。

答案 1 :(得分:1)

您调用过的原始代码

concat([obs1, obs2, ..., obsN])

从技术上讲,这只是为concat函数提供错误参数的一种情况,正如预期的那样

concat(obs1, obs2, ..., obsN)

正如安德鲁也指出的那样。您可以在learn-rxjs

上阅读有关rxjs函数的更多信息。

要深入一点:concat所做的是从其他可观察对象返回一个可观察对象。当执行时调用concat时,它将执行您放入的每个可观察对象,并等到每个可观察对象按顺序完成后再返回。

数组[obs1,...,obsN]不可观察,因此是“怪异”响应。

答案 2 :(得分:0)

我修改了     const concatenation = concat( [trendingRentals, commonRentals, luxuryRentals]); 对于     const concatenation = concat( trendingRentals, commonRentals, luxuryRentals); 现在它可以正常工作了,但是我不明白为什么...有人可以向我解释发生了什么事?