javascript - 如何在参数函数(Firebase 事务)中使用 Promise?

标签 javascript node.js firebase firebase-realtime-database google-cloud-functions

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/

相关文章:

javascript - 我们如何使用express在nodeJS中实现管理面板?

javascript - 如何在鼠标悬停时改变颜色时逐渐放大,以及如何在鼠标房上逐渐缩小和褪色

javascript - 在 TypeScript tsconfig.json 文件中使用 typeRoots 与 baseUrl 的相对路径

javascript - 卡住了nodejs回调

javascript - Video.js Seek Bar - 在鼠标光标后面寻找点

node.js - Typescript 没有重载与此调用匹配

javascript - 我如何在没有 Node.Js 的情况下使用 FileSaver.js 模块?

firebase - 在 Firebase Firestore 中的数组或对象上过滤 Firebase 集合

android - 如何在一次交易中在 Firebase 上创建用户和上传数据

ios - 如何使选项卡栏单击显示两个 View Controller 之一,具体取决于用户是否登录?