rest 、google map服务的嵌套执行问题

来源:6-3 通用组件之 Rest 模块的建立与逻辑添加

慕尼黑4347840

2019-03-15

项目里,在用户登录成功后,调用REST服务1获取用户信息,获取到对应的司机信息后,再调用 rest 服务2获取关联车辆信息,得到车辆 id 后,执行 google map 的服务,获取当前位置信息,然后调用 rest 服务3去更新车辆位置信息,结果发现 rest3不执行。代码如下:

checkLoginState() {
    const self = this;

    this.storage.get("loginUserId").then((val) => {

      // 如果用户已登录,则根据用户id获取用户个人信息
      if (val != null) {
        this.notLogin = false;
        this.logined = true;
        let root: any = HomePage;
        this.loginUserId = val;

        // 获取当前司机的用户信息
        this.rest.getUserInfo(this.loginUserId).subscribe(
          resp => {
            if (resp.status == 1) {
              this.user = resp.data;
              // 给资源文件添加一个时间戳后缀,用于清除缓存
              this.avatarUrl = resp.data.avatarUrl + "?" + new Date().valueOf();
            } else {
              super.showToast(this.toastCtrl, resp.msg);
            }
          }
        );
        // END 获取当前司机的用户信息

        // 获取当前司机的雇员信息
        this.rest.getEmployeeInfo(this.loginUserId).subscribe(
          res => {
            if (res.status == 1) {
              this.storage.set("loginCompanyId", res.data.companyId);
              this.storage.set("loginEmployeeId", res.data.id);
              this.storage.set("loginEmployeeType", res.data.type);
              this.storage.set("loginEmployeeName", res.data.name);

              console.log("loginCompanyId:" + res.data.companyId);
              console.log("driverId:" + res.data.id);
              console.log("loginEmployeeName:" + res.data.name);

              this.driverId = res.data.id;

              // 获取司机所绑定的卡车信息
              self.rest.getTruckInfo(this.driverId).subscribe(
                res => {
                  if (res.status == 1) {
                    self.storage.set("loginTruckNo", res.data.truckNo);
                    self.storage.set("loginTruckId", res.data.truckId);

                    console.log("loginTruckNo", res.data.truckNo);

                    self.truckId = res.data.truckId;

                    // 获取卡车定位信息
                    self.geolocation.getCurrentPosition().then((resp) => {
                      console.log("locate:", resp.coords.longitude, resp.coords.latitude);

                      console.log(self.truckId);
                      if (!self.truckId) {
                        return;
                      }
                      // this.positionTracking = setInterval(() => {
                      console.log("postion:", resp.coords.longitude + "", resp.coords.latitude + "");
                      // console.log("rest",self.rest);
                      self.rest.updatePosition(resp.coords.longitude + "", resp.coords.latitude + "", "", self.truckId);
                      // }, POSITION_INTERVAL);

                    }, err => {
                      console.log(err);
                      super.showToast(self.toastCtrl, "获取当前位置信息失败!")
                    });
                    // END 获取卡车定位信息
                    
                  } else {
                    super.showToast(self.toastCtrl, res.msg);
                  }
                }
              );
              // END 获取司机所绑定的卡车信息




            } else {
              super.showToast(self.toastCtrl, res.msg);
            }
          }
        );
        // END 获取当前司机的雇员信息

        // if all trip are completed, go to home page
        this.nav.setRoot(root);

      } else {// 如果未登录
        this.avatarUrl = DEFAULT_AVATAR;
        this.notLogin = true;
        this.logined = false;

        this.nav.setRoot(LoginPage);
      }

    }).catch(error => {
      super.showToast(this.toastCtrl, "获取用户登录信息失败");
    });

  }

写回答

1回答

Parry

2019-03-17

是没执行到还是执行错误了啊?

0
1
慕尼黑4347840
忘了回调 subscribe 方法了
2019-03-26
共1条回复

快速上手Ionic3多平台开发企业级问答社区

新手可学,独立开发跨iOS/Android/微信平台项目

613 学习 · 750 问题

查看课程