首页 > 解决方案 > Firebase admin sdk 调用错误的捕获

问题描述

我正在尝试添加一个新用户,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 (with as param)。reason相反,总是调用外部的(err作为参数)。

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

谢谢

标签: javascriptnode.jsfirebasegoogle-cloud-firestorefirebase-admin

解决方案


这是因为你没有返回由返回的承诺userCollection.doc(record.uid).set(),因此你没有返回由后续的then()catch()方法返回的承诺。换句话说,您不会返回promises 链

但是,实际上,您应该将您的 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));

    });

更多细节在这里这里这里


推荐阅读