Angular 可观察的类型脚本。展开用法
在我的案例中,Obervable的.expand()操作符的正确用法让我感到困惑。搜索没有提供太多的样本 因此,我尝试递归地运行一个方法/可观察对象,并返回一个可观察对象作为结果。看起来有点凌乱,建议如何美化也很感激:) 相关代码: 方法:Angular 可观察的类型脚本。展开用法,angular,typescript,Angular,Typescript,在我的案例中,Obervable的.expand()操作符的正确用法让我感到困惑。搜索没有提供太多的样本 因此,我尝试递归地运行一个方法/可观察对象,并返回一个可观察对象作为结果。看起来有点凌乱,建议如何美化也很感激:) 相关代码: 方法: private itemsTmp:Item[] = []; findRecentItemsAround(radius_current?:number) { let radiusKm:number = radius_current? radius
private itemsTmp:Item[] = [];
findRecentItemsAround(radius_current?:number) {
let radiusKm:number = radius_current? radius_current : 10;
let radiusLimitKm:number = 50;
this.itemsTmp = [];
const result = Observable.create(observer => {
this._getRecentLocalItems(radiusKm).subscribe((data) => {
this.itemsTmp = data;
console.log("Found items:" + this.itemsTmp.length + " radius: "+ radiusKm);
radiusKm = radiusKm+10;
if(this.itemsTmp.length < 1 && radiusKm <= radiusLimitKm) {
return this.findRecentItemsAround(radiusKm);
}
else {
observer.next(this.itemsTmp);
observer.complete();
}
});
});
// result.expand(data => {
// console.log("In expand");
// });
return result;
}
this.itemsServiceUtils.findRecentItemsAround().subscribe(data => {
observer.next(data);
observer.complete();
});
在当前状态下,方法不会第二次运行。如果我取消注释
.expand
-得到一个错误结果。expand不是一个函数
请就修复/正确实现提出建议,因为我似乎误解了一些可观察到的东西/制造了一些混乱:D这里有一个更干净的实现:
getRecentLocalItems(radiusKm: number) {
return this._getRecentLocalItems(radiusKm).map(
t=> { return { distance: radiusKm, results: t } };
);
}
findRecentItemsAround(radiusKm:number, radiusLimitKm:number) {
return this.getRecentLocalItems(radiusKm).expand(t=> {
if (t.distance > radiusLimitKm-radiusKm || t.results.length > 0)
return Observable.empty();
return this.getRecentLocalItems(t.distance + 10);
})
.filter(t=> t.results.length > 0 || t.distance > radiusLimitKm);
}
这样使用:
this.itemsServiceUtils.findRecentItemsAround(10).subscribe(data => {
//data.distance...
//data.results...
});
我看到了一个例子,其中可观察的对象是
observable().return().expand()
可能,expand
不在该级别的对象。也许你应该先调用另一个方法。你确定这是.expand()
的正确用法吗?我收到一个错误您在预期流的位置提供了“未定义”。您可以提供可观察的、承诺的、数组的或可观察的。
on.expand是否忘记了某个返回语句?否,此。\u getRecentLocalItems
从http.get()返回可观察的,返回数据或空列表。进一步你可以在这里看到.expand()
由导入“rxjs/add/operator/expand”导入代码>oops。。。我犯了一个错误递归调用应该是“GetRecentLocationItems”而不是“FindRecentItemsRound”