【问题标题】:Why my subscribe function is printing an object instead of the result of the http request?为什么我的订阅函数打印的是对象而不是 http 请求的结果?
【发布时间】:2019-06-07 01:11:01
【问题描述】:

为什么这段代码会打印这个:

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

【问题讨论】:

  • 非常感谢!!!我是 Web 开发的新手,所以我无法理解 Observables、Promises 和异步函数:C 有什么资源推荐给像我这样的新手吗?

标签: angular typescript asynchronous rxjs


【解决方案1】:

你调用的原始代码

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

在技术层面上,这只是向 concat 函数提供错误参数的情况,正如它所期望的那样

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

正如安德鲁也指出的那样。您可以在learn-rxjs上阅读更多关于 rxjs 函数的信息

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

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

【讨论】:

    【解决方案2】:

    这里的 concat 静态运算符接受 Observable(s) 作为参数而不是 Array

    如果你传递一个 Observables 数组,则会返回嵌套的 observables。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-02
        • 2011-06-02
        • 1970-01-01
        • 2017-06-18
        相关资源
        最近更新 更多