javascript - 创建批量用户后,Firebase 不添加文档
问题描述
背景
我正在尝试使用网络应用程序中的初始用户列表播种我的 Firebase。这应该是一个两步过程:
createUserWithEmailAndPassword()
使用该方法将用户添加到 Firebase Auth 。collection.add()
使用该方法将用户添加到 Firestore 集合。
代码
// Initialize Firebase:
var db = firebase.initializeApp(config).firestore();
// Function to add a new user:
function add(email) {
firebase.auth().createUserWithEmailAndPassword(email, 'password')
.then(function (user) {
console.log('User created:', email, user.user.uid);
return db.collection('users').add({
email: email,
uid: user.user.uid
});
})
.then(function () {
console.log('Document created:', email);
})
.catch(function (error) {
console.error('Could not create user/document:', error);
});
}
// Seed database with random users:
for (var i = 0; i < 10; ++i) {
add(i + '@foo.bar');
}
问题
上一节中的代码不起作用。我的期望是它应该创建 10 个用户,并在成功时将 10 个相应的文档添加到数据库中。但是,即使正确创建了用户,它也只会将部分文档 (1-3) 添加到数据库中。
想法
我想出了一些关于这段代码不起作用的可能原因的想法:
- 该
createUserWithEmailAndPassword()
方法不仅会创建一个新用户,还会执行自动登录。可能,这可能会导致某种竞争条件。 - 该
createUserWithEmailAndPassword()
方法返回一个带有UserCredential
新注册用户对象的承诺(我相信)。但是,我可能错了,这个对象代表一个登录用户,这可能是前一点出现竞争条件的原因。 - 我有可能以错误的方式使用承诺,因为第二个
then()
也没有catch()
被调用。
解决方案
以下是 Firebase 支持答案的摘录:
每次使用 Auth 创建新用户时,都会将新创建的用户设置为应用程序的当前用户。每当 Firestore 检测到发生用户更改时,它都会关闭所有未完成的流并取消任何正在进行的请求。
这完全有道理并解释了这种行为。
推荐阅读
- r - 如何更改条形图中单个条形的位置?
- python - Python; 使用初始字符列表从其他列表中检索完整单词?
- rust - 将特征的边界引用作为 IntoIterator 时的生命周期冲突
- javascript - 如何管理同一页面中多次包含的相同代码的 CSS 选择器?
- javascript - 如何通过参数访问子对象
- jags - 在 Fedora 33 上安装 rjags
- mysql - MySQL 合并来自多个 JSON 行的数组
- reactjs - React Select 在选择第二个选项之前不会更新
- java - 使用Java的数字总和
- postgresql - 为 TypeORM 配置获取正确的 socketPath