繁体   English   中英

Javascript-等待在错误的时间触发

[英]Javascript - await triggering at wrong time

我对asyncawait非常await ,希望有人可以帮助我。

我有一个函数调用register ,在该函数中,我注册了一个用户,然后将有关它们的一些数据发送到服务器以建立一个“用户配置文件”。

我遇到的问题是,我还有一个名为login的函数,该函数也是异步的,并在用户注册后立即将其重定向..这意味着“用户配置文件”数据永远不会发送。

这是我的register功能:

async register(user: User) {
    try {
      const result = await this.afAuth.auth.createUserWithEmailAndPassword(user.email, user.password);
      await this.afAuth.auth.currentUser.updateProfile({
        displayName: user.displayName,
        photoURL: ""
      }).then(() => {
        let currentUser = result;
        let date = new Date().getTime();
        let userData = {
          email: currentUser.email,
          displayName: currentUser.displayName,
          uid: currentUser.uid,
          created: date,
        }
        this.database.list('users').set(userData.uid, userData).then(() => {
            return;
        }); //I want to continue after this line is called. 
    return; 
      }, function(error) {
        console.log(error)
      });
    } catch(e) {
      console.log(e);
    }
  }

我在错误的位置await吗? 我希望一旦数据为.set即可调用login函数...

任何想法我在做什么错..我真的很感谢任何帮助。 谢谢!

使用async / await目的是您不必处理then()catch()

async function register(user: User) {
  try {
    const result = await this.afAuth.auth.createUserWithEmailAndPassword(user.email, user.password);

    await this.afAuth.auth.currentUser.updateProfile({
      displayName: user.displayName,
      photoURL: ""
    });

    let currentUser = result;
    let date = new Date().getTime();
    let userData = {
      email: currentUser.email,
      displayName: currentUser.displayName,
      uid: currentUser.uid,
      created: date,
    };

    await this.database.list('users').set(userData.uid, userData)

    // Do something after everything above is executed

    return; 
  } catch(e) {
    console.log(e);
  }
};

等待让您等待诺言。 一个异步的await的最大好处就是不必使用then语法或任何明确的承诺。 不知道为什么要混合样式。 在await语句之后“做更多的事情”非常简单。

这是一些伪代码。 我删除了try catch,因为您的整个功能都在其中,这使其变得毫无意义。 同样,如果任何承诺被拒绝,它将被转换为异常。 如果在承诺内发生异常,则将其转换为拒绝,然后将其转换为异常。 承诺之外的其他例外是​​普通的旧例外。

我自由地将TypeScript标记添加到您的问题中,因为您发布了TypeScript语法。 TypeScript不是Javascript

async register(user: User) {
  const result = await createUser(...);
  await updateProfile(...);
  const userData = buildUserData(...);
  await setUserData(database, userData);
  console.log('more stuff after setUserData');
}

暂无
暂无

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

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