switchMap不接受要在其中执行的函数

时间:2017-07-26 09:32:10

标签: javascript firebase rxjs angularfire2 switchmap

我尝试执行以下搜索:
我想根据第一个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;
  });
}

2 个答案:

答案 0 :(得分:2)

我通过将以下内容添加到switchMap函数的末尾来解决了我的问题:

import { Observable } from 'rxjs/Observable';
.switchMap(items => {
    ...
    return Observable.of(route);
  }).subscribe();

答案 1 :(得分:0)

当您不需要修改其流时,应该使用Observable的do方法。