首页 > 解决方案 > 如何在 .then() 中设置一个变量以在以后的 .then() 中使用 - Firebase

问题描述

我正在使用 ReactJS、Typescript 和 Firebase 为杂耍者构建一个在线平台。我正在尝试建立一个管理员可以发放“金票”的系统。然后,用户可以将这些金票发送给他们的朋友,以便他们的朋友也可以开户。

我已经完成了帐户的实际创建。

问题是,当他们点击时我需要做四件事Create Account(目前,我按这个顺序做):

  1. 将他们的头像上传到firebase.storage
  2. 使用他们的电子邮件和密码创建用户firebase.auth
  3. 更新用户的 displayName 和 photoURLfirebase.auth
  4. firebase.firestore使用我们在其他步骤中收集的信息为用户创建一个文档。

目前它不起作用,因为在后面的步骤中,一些变量出现未定义。

这是代码:

doRegisterWithEmailPasswordAndPhoto = async (
        email: string,
        password: string,
        firstname: string,
        lastname: string,
        username: string,
        photo: File | null
    ) => {
        let tempuid: string | null = null;
        let tempPhotoURL: string | null = null;
        await this.storage
            .ref()
            .child('profile-pictures/' + username)
            .put(photo ? photo : exampleProfilePic)
            .then((photoRef: firebase.storage.UploadTask) => {
                    tempPhotoURL = photoRef.snapshot.downloadURL;
                    return this.auth.createUserWithEmailAndPassword(
                        email,
                        password
                    );
            })
            .then((res: firebase.auth.UserCredential) => {
                if (res.user) {
                    tempuid = res.user.uid;
                    return res.user.updateProfile({
                        displayName: firstname + ' ' + lastname,
                        photoURL: tempPhotoURL,
                    });
                }
            })
            .then(() => {
                this.db.collection('users').doc(tempuid).set({
                    firstname: firstname,
                    lastname: lastname,
                    username: username,
                    email: email,
                    admin: false,
                    forumPosts: 0,
                    created: this.dbFunc.FieldValue.serverTimestamp(),
                });
            });
    };

因此,如您所见,我试图通过创建两个临时变量来存储项目来解决它:tempuidtempPhotoURL. 但我仍然遇到uid is undefined错误。

希望有人能帮助我。

提前致谢!

标签: javascriptreactjstypescriptfirebasepromise

解决方案


推荐阅读