【发布时间】:2018-01-01 12:56:11
【问题描述】:
我尝试执行以下搜索:
我想根据第一个id 搜索一些东西,这会返回一个FirebaseListObservable。然后我尝试在Observable 的switchMap 函数内执行代码,因为搜索通常需要更长的时间,否则我的代码将完成,并且将使用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;
});
}
我收到以下错误:
Argument of type '(items: any) => void' is not assignable to parameter of type '(value: any, index: number) => ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
【问题讨论】:
-
switchMap回调函数没有返回任何内容。 -
我需要返回什么?我假设我不需要返回任何东西,因为我在一个 observable 中。
-
仅供参考,当我使用
map而不是switchMap时,代码运行良好。 -
传递给
map的函数可以返回任何值——包括undefined——传递给switchMap的函数必须返回一个ObservableInput和undefined是不 i> 一个有效的ObservableInput。 -
你知道我是如何解决这个问题的吗?这应该不难吧?我在以类似方式使用它的教程中看到。链接显示
ObservableInput interface describes all values that are either an SubscribableOrPromise or some kind of collection of values that can be transformed to Observable emitting that values. Every operator that accepts arguments annotated with this interface, can be also used with parameters that are not necessarily RxJS Observables.我以为我通过了FirebaseListObservable,因此满足了这个标准。
标签: javascript firebase rxjs angularfire2 switchmap