【问题标题】:Firebase Firestore - 2 queries Promise AllFirebase Firestore - 2 个查询 Promise All
【发布时间】:2017-12-12 00:29:21
【问题描述】:

我试图生成一些用于开发的虚假配置文件,我使用预定义的 json 数据集,但我似乎无法让它工作,我想使用给定的电子邮件和密码创建帐户,然后使用同一 json 中的其他数据数据集以在其 uid 下的集合中创建用户配置文件。我试图向用户承诺,除了创建的所有内容之外,所有内容都是 firebase 中经过身份验证的用户,而不是包含剩余数据的填充用户集合。到目前为止,我的函数看起来像这样:

  doSignupFAKEUSERS( users: any ) {

  users.forEach( usr => {

  firebase.default.auth().createUserWithEmailAndPassword( usr.email, usr.password ).then( (result) => {

          const added = this.afs.collection<any>("users").doc(result.uid).set({
              email:usr.email,
              pw: usr.password,
              uid: result.uid,
              age: usr.age,
              displayName: usr.email.substring(0, usr.email.indexOf("@")),
              photoURL: usr.photoURL,
              currentCity: usr.currentCity,               
            })

            return Promise.all([result, added]);    

      });

    })    
}  

这是我的测试数据

    account: [{ displayName: string, age: number, email: string, photoURL: string, uid: string,  currentCity: string }] = [
    {
        displayName: 'Albert Cruz',
        age: 23,
        email: 'albert.cruz15@example.com',
        photoURL: 'https://randomuser.me/api/portraits/men/95.jpg',
        currentCity: 'Prague',
        uid: ''
    } ,
    {
        displayName: 'Albert Wheeler',
        age: 26,    
        email: 'albert.wheeler22@example.com',
        photoURL: 'https://randomuser.me/api/portraits/men/40.jpg',
        currentCity: 'Prague',    
        uid: ''
    }      

    ];  

【问题讨论】:

  • Promise.all() 接受一系列承诺。看起来added 可能是一个承诺,但它看起来不像result

标签: javascript typescript firebase firebase-realtime-database


【解决方案1】:

由于 users 是一个数组,您可以将其映射到 Promise 中并将其作为参数传递给 Promise.all

doSignupFAKEUSERS(users: any) {
  return Promise.all(
    users.map(usr => {
          firebase.default.auth().
          createUserWithEmailAndPassword(usr.email, usr.password)
          .then((result) => {
            return this.afs.collection<any>("users").doc(result.uid).set({
              email: usr.email,
              pw: usr.password,
              uid: result.uid,
              age: usr.age,
              displayName: usr.email.substring(0, usr.email.indexOf("@")),
              photoURL: usr.photoURL,
              currentCity: usr.currentCity,
            })
          });      
        })
  );
}

【讨论】:

  • 谢谢哥们,但是它仍然没有触发第二个然后添加到用户集合中,它只添加了第一个用户
  • @Kravitz 你发现错误了吗? .then(happy).catch(not so happy) 如果您在调用 firebase.default.auth 之前使用 console.log,那么传递给函数的 2 个用户是什么?
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2019-12-03
  • 2021-03-29
  • 2019-06-15
相关资源
最近更新 更多