繁体   English   中英

我如何等待订阅订阅

[英]How do I await for subscribe to subscribe

我使用下面的代码,直到我发现 getConnectedUser() function 比 verifyUser() 花费更长的时间,所以 this.userUID 是未定义的:

this.layoutService.getConnectedUser().subscribe(

  (data) => {
    this.userSaml = data;
    this.layoutService.connectedUser.matricule = this.userSaml.matricule;
    this.layoutService.connectedUser.profil = this.userSaml.profil;
    this.layoutService.connectedUser.uid = this.userSaml.uid;
    this.layoutService.connectedUser.username = this.userSaml.username;
    this.layoutService.connectedUser.city = this.userSaml.city;
    console.log("dashboard this.layoutService.connectedUser", this.layoutService.connectedUser);
  },
  (err) => {
    throw err;
  }
);

      this.userUID = this.layoutService.connectedUser.uid;
      console.log("this.userUID", this.userUID);
      this.adminService.verifyUser(this.userUID).subscribe(
        (data) => {
          this.userStatus = data[0].status;
          this.userProfile = data[0].profil;
          console.log("userProfile" + JSON.stringify(data[0].profil));
          this.userExists = true;
        },
        (err) => {
          this.userExists = false;
        }
      );

因此,我想确保 getConnectedUser 订阅完成以调用第二个,我更改了代码并添加了 .add 方法,如下所示:

this.layoutService.getConnectedUser().subscribe(

  (data) => {
    this.userExistsRefog = true;
    this.userSaml = data;
    this.layoutService.connectedUser.matricule = this.userSaml.matricule;
    this.layoutService.connectedUser.profil = this.userSaml.profil;
    this.layoutService.connectedUser.uid = this.userSaml.uid;
    this.layoutService.connectedUser.username = this.userSaml.username;
    this.layoutService.connectedUser.city = this.userSaml.city;
    console.log("home connectedUser", this.layoutService.connectedUser);
  },
  (err) => {
    this.userExistsRefog = false;
    throw err;
  }
).add(() => {
  this.userUID = this.layoutService.connectedUser.uid;
  console.log("this.userUID", this.userUID);
  this.adminService.verifyUser(this.userUID).subscribe(
    (data) => {
      this.userStatus = data[0].status;
      this.userProfile = data[0].profil;
      console.log("userProfile" + JSON.stringify(data[0].profil));
      this.userExists = true;
    },
    (err) => {
      this.userExists = false;
    }
  );
});

我想了解如何在此示例中使用 Async/await 方式,以及采用类似功能的最佳方法是什么? 谢谢

主要你有两种方法。

1.在getconnecteduser()方法的订阅中编写方法调用verifyuser()。这样你永远不会得到null值。 2.你可以使用promises代替observable订阅。 然后使用 async/await 来延迟方法的执行。

async userTasks() {
  const usersDetails = await this.layoutService.getConnectedUser().toPromise();
  this.layoutService.connectedUser.uid = usersDetails.uid;
  this.adminService.verifyUser(this.userUID).subscribe(
    (data) => {
      this.userStatus = data[0].status;
      this.userProfile = data[0].profil;
      console.log("userProfile" + JSON.stringify(data[0].profil));
      this.userExists = true;
    },
    (err) => {
      this.userExists = false;
    }
  );
}
  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM