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(Google 云函数)
谢谢!
更新:
我期望仅当 Promise 解析无错误(即到达 then
)时才从该参数函数返回数据,因此仅在用户创建时才应用事务。
最佳答案
Promise 不能在事务处理程序中使用。事务处理程序需要立即返回事务所在位置数据库的新内容。
调用transaction()它本身返回一个 promise ,因此如果您想在成功交易后执行某些操作,您可以在该 promise (包含交易的成功状态)上使用 then() 并跟进一些其他操作,这些操作也可以从以下位置返回 promise 那里。
现在,您似乎没有在事务中对数据库进行任何更改,所以我很好奇您为什么要使用它。
关于javascript - 如何在参数函数(Firebase 事务)中使用 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46273545/