javascript - 如何在 .then() 中设置一个变量以在以后的 .then() 中使用 - Firebase
问题描述
我正在使用 ReactJS、Typescript 和 Firebase 为杂耍者构建一个在线平台。我正在尝试建立一个管理员可以发放“金票”的系统。然后,用户可以将这些金票发送给他们的朋友,以便他们的朋友也可以开户。
我已经完成了帐户的实际创建。
问题是,当他们点击时我需要做四件事Create Account
(目前,我按这个顺序做):
- 将他们的头像上传到
firebase.storage
- 使用他们的电子邮件和密码创建用户
firebase.auth
- 更新用户的 displayName 和 photoURL
firebase.auth
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(),
});
});
};
因此,如您所见,我试图通过创建两个临时变量来存储项目来解决它:tempuid
和tempPhotoURL
. 但我仍然遇到uid is undefined
错误。
希望有人能帮助我。
提前致谢!
解决方案
推荐阅读
- grails - Windows 上的 grails-3.3.9 没有 run-app 命令
- sql - 计算用户的未读消息数
- java - mvn 包因新的 SpringBoot 项目而失败
- real-time - 学习在 Splunk 中查询的基础知识
- vbscript - 带有空格的 VBScript CopyFile
- swift - 如何将 AKSequencer 连接到 AKCallbackInstrument?
- javascript - javascript 异步回调生命周期
- angular - app.component.ts OnInit 被调用 11 次的正常行为?
- azerothcore - AzerothCore:如何更改客户端空闲时断开连接的时间?
- php - Laravel 5.7 Schema 外键 SQLSTATE[42000] 迁移