Firebaseを使用したアカウント登録処理を実装しようとしております。
非同期での振る舞いの中で理解できない点があったため質問致します。
- アカウントを作成
- 戻り値を使用しdisplayUserNameを登録
- displayUserName登録後にログイン
のような流れを実現したいと思っております
// アカウント登録処理 createUser(user) { createUserWithEmailAndPassword(this.auth,user.mail, user.password) .then((result) => { this.addUserName(result.user, user.userName); this.login(user); }) .catch((erroe) => console.log(error)); } } // userName登録処理 addUserName(user: User, userName: string) { updateProfile(user, { displayName: userName }) .then(() => {}) .catch((erroe) => console.log(error)); } // login処理 login(user) { signInWithEmailAndPassword(this.auth, user.userMail, user.userPassword) .then((result) => console.log(result)) .catch((error) => console.log(error)); }
最初のアカウント登録関数の非同期処理終了後、thenの中で
2つの非同期の処理を行っているものと思っております。
現状タスク通りのdisplayUserName登録後にログインするになっているのですが、login関数が同期的に行われている理由がわかりません。
addUserNameの戻り値はvoidでupdateProfileはpromise<void>なのですが、非同期で行われていないのでしょうか?
試したこと
addUserNameが非同期だと思っていたので、
addUserName(user: User, userName: string) { updateProfile(user, { displayName: userName }) .then(() => { /*ここで非同期ではない時間のかかる処理*/ }) .catch((erroe) => console.log(error)); }
を試してみたのですがタスク通りの動きになります。
想像では、login関数のほうが早く処理されると思ってしまっています。
どこの認識が間違っているのでしょうか?