我尝试执行以下搜索:
我想根据第一个id
搜索某些内容,这会返回FirebaseListObservable
。然后我尝试在switchMap
的{{1}}函数内执行代码,因为搜索通常需要更长时间,否则我的代码将完成,并且将使用Observable
的错误值。
我尝试为一系列点运行它,所以我在开头循环一个数组。
这是我的代码:
lastLoc
我收到以下错误:
evaluateRoutes() {
this.currentTour.travelDistance = 0;
this.currentTour.travelTime = 0;
this.currentTour.workTime = 0;
const locs = this.currentTour.locIds;
let lastLoc = null;
locs.forEach(loc => {
console.log(lastLoc, loc);
if (lastLoc !== null) {
console.log('if durch', lastLoc, loc);
this.afDb.list('routes', {
query: {
orderByChild: 'idStart',
equalTo: loc
}
}).switchMap(items => {
console.log('switchMap starts', lastLoc, loc);
const filtered = items.filter(item => item.idEnd === lastLoc);
const route = filtered[0];
this.currentTour.routeIds.push(route.$key);
this.currentTour.routes.push({
idEnd: route.idEnd,
idStart: route.idStart,
travelDistance: route.travelDistance,
travelTime: route.travelTime,
tsCreated: route.tsCreated,
userCreated: route.userCreated
});
this.currentTour.travelDistance = +0 + this.currentTour.travelDistance + route.travelDistance;
this.currentTour.travelTime = +0 + this.currentTour.travelTime + route.travelTime;
}).subscribe();
}
lastLoc = loc;
});
}
答案 0 :(得分:2)
我通过将以下内容添加到switchMap
函数的末尾来解决了我的问题:
import { Observable } from 'rxjs/Observable';
.switchMap(items => {
...
return Observable.of(route);
}).subscribe();
答案 1 :(得分:0)
当您不需要修改其流时,应该使用Observable的do
方法。