有角,异步调用对象?

时间:2019-02-10 23:25:15

标签: javascript angular typescript async-await rxjs

我在网上找到的大多数示例都展示了如何将async管道与数组或对象数组一起使用,作为URL API调用的响应。

这种情况是,有时您不会获得数组对象,但是会得到一个包含内部对象和数组的混合对象。并且您仍将在HTML内使用| async。像这样one

在下面的Stackblitz中,我添加了[data]="remoteData | async",并且我的表不会显示任何数据。收到以下错误消息:

  

错误:InvalidPipeArgument:'[对象对象],[对象对象],[对象   对象],[对象对象],[对象对象],[对象对象]

不用说,如果我将其删除,数据将显示出来。

很显然,我知道我的方法适用于作为响应的数组,在这种情况下,响应是一个对象。我知道您应该使用Observables(behaviorSubject)来完成这项工作,但是很难做到正确。

那么,我可以保留async pipe吗?甚至很难响应是一个对象,还是需要手动subscribeunsubscribe

到目前为止我已经尝试过: 服务中的第18行

this.listSource = apiCall;
    return this.listSource;

但我收到一条轻巧的错误消息:

  

'Observable'缺少类型中的以下属性   “ BehaviorSubject”:_value,value,getValue,next和另外9个。

2 个答案:

答案 0 :(得分:1)

在您的控制器中,remoteData不是可观察到的,而是实际值。

ngOnInit() {
  this.remoteData = this.remoteService.getData();
}

现在它是可观察的,并且async管道将起作用。

答案 1 :(得分:0)

您不需要使用异步管道,只需检查代码,删除异步管道即可,一切都很好。您可以在本教程https://angular.io/tutorial/toh-pt6#asyncpipe

中详细了解如何使用异步管道以及为什么需要使用异步管道