javascript - 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有问题还是我做错了什么?
谢谢
解决方案
这是因为你没有返回由返回的承诺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));
});
推荐阅读
- angular - 删除角材质 mat-icon-button 的阴影
- java - 捕获异常后如何避免返回null?
- django-models - 如何使用 django-filter 搜索 django restframework 中的所有内容
- python - 在主窗口显示弹出窗口?
- react-native - 如何升级 react-native 版本?
- angular - 为什么 Promise api 调用没有传递正确的数据元素?
- ios - #define 改变多参数方法名
- python - 在 groupby() Pandas 之后将 Multiindex 转换为单个索引
- c++ - 使用指针调用 C++ DLL 函数
- android - 卸载android应用程序不会删除文档目录中的文件