Firebase admin sdk 调用错误捕获

Firebase admin sdk calling the wrong catch

我正在尝试使用 firebase-admin 添加新用户,然后在自定义集合中保存新文档。

示例代码如下:

admin.auth().createUser(user)

    .then((record) => {

       user.uid = record.uid;

       userCollection.doc(record.uid).set({...user})

           .then(writeResult => {
               resolve();
           })
           .catch(reason => {
               reject(reason)
           });
    })
    .catch((err) => {
        reject(err);
    });

问题是,如果 userCollection.doc(record.uid).set({...user}) 失败,我希望调用嵌套的 catch(以 reason 作为参数)。相反,总是调用外部的(使用 err 作为参数)。

是SDK有问题还是我做错了什么?

谢谢

这是因为您没有 return userCollection.doc(record.uid).set() 的承诺 return,因此您没有 return return 的承诺通过随后的 then()catch() 方法。换句话说,你不 return promises chain

但是,实际上,您应该按如下方式链接您的 Promise,避免 then()/catch() 金字塔。

  admin
    .auth().createUser(user)
    .then((record) => {
      user.uid = record.uid;

      return userCollection
        .doc(record.uid)
        .set({ ...user })
    })
    .catch((err) => {

      // Here you catch the potential errors of 
      // the createUser() AND set() methods

      console.log(JSON.stringify(err));

    });

更多详情here, here and here