【发布时间】:2017-09-18 20:42:13
【问题描述】:
Firebase transaction 接收第一个参数作为函数(任何类型)。我可以在这个函数中使用返回 promise 的方法吗? (在我的例子中是firebase-admin.auth().createUser())。
为了清楚起见,一些代码:
const ref = admin.database().ref(...);
ref.transaction((currentData) => {
if (currentData === null && ...) {
admin
.auth()
.createUser({...})
.then(data => return { uid: data.uid }) // Need to return this 'someData' from function that wraps current promise.
.catch(() => return null)
} else {
return null
}
});
在这段代码中,函数无需等待 promise 被解析即可运行。
NodeJS v.6.11.1(谷歌云函数)
谢谢!
更新:
我希望只有在 promise 没有错误地解决(即达到then)时才从这个参数函数返回数据,因此只有在用户创建时才应用事务。
【问题讨论】:
-
someData是在哪里定义的?为什么在箭头函数中.then()中使用return而没有{}?您是否希望通过if (validateUserData(req.body)) {}的validateUserData调用返回Promise或Boolean? -
您好,@guest271314!对不起,我对示例代码太抽象了。将其更改为更接近真实。 pastebin 代码中的 validateUserData 应该返回
Boolean。 -
目前
validateUserData()返回一个Promise,是吗?您是否考虑在 OP 的链接 pastebin 中包含代码并指出预期结果是什么? -
@guest271314 对不起,pastebin 中的这段代码没有经过充分测试,你是对的,它返回未解决的承诺,总是评估为真。非常感谢!
标签: javascript node.js firebase firebase-realtime-database google-cloud-functions