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

时间:2018-06-17 01:33:45

标签: javascript typescript async-await

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

我有一个函数调用register,在该函数中我注册了一个用户,然后将一些关于它们的数据发送到服务器以构建一个"用户配置文件"可以这么说。

我遇到的问题是我还有一个名为login的函数,它也是异步的,只要注册了,就会重定向用户。这意味着& #34;用户个人资料"数据永远不会被发送。

这是我的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位置错误吗?我希望在login ...

数据后调用.set函数

任何想法我做错了什么......我非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

使用like this的重点是您无需处理import $ from 'jquery'; $('.my-element').animate(/* ... */); then()

catch()

答案 1 :(得分:0)

await让你等待承诺。 async-await的最大好处之一是不必使用then语法或任何明确的承诺。不确定为什么要混合样式。 “做更多事情”非常简单。在等待声明之后。

这是一些伪代码。我拿出了try catch,因为你的整个函数都在其中,这使得它毫无意义。此外,如果任何承诺拒绝,它将被转换为异常。如果在promise中发生异常,则将其转换为拒绝,然后将其转换为异常。承诺之外的其他例外是​​普通的例外。

我冒昧地将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');
}