AsyncPipe
Observable
. 在你的情况下,你是在应用它
getAllProducts
这是一个
Array
,我相信。所以你得到了那个错误。
可能的解决方案:
-
去除
async
从你的for循环
获取所有产品
-
制造
你的
注意:因为你是循环通过
productList
调用webapi来获取产品,您可能必须使用
mergeMap
我相信解决方案2最适合你,因为你
产品列表
包含所有
产品
您需要点击webapi来获取
.
学习MergeMap
here
示例代码(未测试&您需要添加用于错误处理的代码
catchError
):
import { from } from 'rxjs';
import { mergeMap, map, combineAll } from 'rxjs/operators';
this.getAllProducts = from(this.productList)
.pipe(
mergeMap(element =>
this.appService.getRest(AppConfig.settings.product.getProducts + '/' + element.product_obj_id).pipe(
map(res => res['data'])
)
),
combineAll()
)
<div *ngFor="let product of getAllProducts | async">
Getting data
</div
说明:
因为你
是一个
阵列
你必须遍历它,然后对每个对象发出一个请求
product
反对
阵列
from(this.productList)
产品列表
pipe
使用
合并地图
产品
this.appService.getRest(AppConfig.settings.product.getProducts + '/' + element.product_obj_id)
这个在里面
合并地图
. 那么我们
map
response
我们从webapi获取数据,只使用
res['data']
. 最后我们
combineAll
返回一个
Observable<[]>
获取所有产品
,因此
是一个
可见的
我们可以利用
异步管道
编辑:
在您的
constructor
而不是在
ngOnit
const getAllProducts = this.sharedService.getData().pipe(
mergeMap(data=> from(data))
).pipe(
mergeMap(element =>
this.appService.getRest(AppConfig.settings.product.getProducts + '/' + element.product_obj_id).pipe(
map(res => res['data'])
)
),
combineAll()
)