javascript - 以原子方式递增 Firebase 实时数据库中的共享计数器

标签 javascript firebase firebase-realtime-database transactions

我需要减少 Firebase 实时数据库中存储的计数器(名为 credits)。

要减少计数器,我这样做:

var ref = admin.database().ref('licenseCredits/' + name + '/credits');

ref.transaction( (value) => {

  if (value === null) {
    return 0;
  } else if (typeof value === 'number') {

    return value - 1;
  } else {
    console.log('The counter has a non-numeric value: '); 
  }
});

credits 字段正在正确递减。 我将此代码放入可调用函数中,但我不知道如何将递减的值返回给调用者。如果我只是返回 ref.transaction 结果,我会得到一个“未处理的 RangeError 异常”。

最佳答案

根据下面的文档,应该实现 onComplete 函数。

https://firebase.google.com/docs/reference/js/firebase.database.Reference#transaction

var ref = admin.database().ref('licenseCredits/' + name + '/credits');
ref.transaction( (value) => {

    if (value === null) {
        return 0;
    } else if (typeof value === 'number') {
        return value - 1;
    } else {
        console.log('The counter has a non-numeric value: '); 
    }
}, function(error, committed, snapshot) {
    if (error) {
        console.log('Transaction failed abnormally!', error);
    } else if (!committed) {
        console.log('We aborted the transaction.');
    } else {
        console.log('Success!');
    }
    console.log("Credit data: ", snapshot.val());
});

关于javascript - 以原子方式递增 Firebase 实时数据库中的共享计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52414529/

相关文章:

java - Android应用程序无法连接到firebase数据库

javascript - 通过按钮展开和折叠行

swift - 如何使用 Firebase 向特定用户发送信息

firebase - 了解Firebase和谷歌云功能的用途

ios - 如何从 Firebase 快照解析单个字典?

java - 从 firebase 检索数据后需要反转 ListView

javascript - Firebase 数据库 - 防止写入指定路径以外的所有路径

javascript - Javascript - 从字符串中提取数字

javascript - JQuery 对话框滚动条位置

javascript - 如何将剪切面渲染为实体对象