【问题标题】:Firebase transaction not workingFirebase 交易不工作
【发布时间】:2017-12-09 01:43:23
【问题描述】:

我从一个角度应用程序调用,使用 angularfire2,this.afDb.database 是数据库实例

const downloadsRef = this.afDb.database.ref('research_reports-published/' + rrid + '/' + field);
downloadsRef.transaction(function(fieldval) {
  if (fieldval) {
    fieldval = fieldval + 1;
  }
  return fieldval;
},
function(error, committed, snapshot) {
  if (error) {
    console.log('Transaction failed abnormally!', error);
  } else if (!committed) {
    console.log('We aborted the transaction (because ada already exists).');
  } else {
    console.log('User ada added!');
  }
  console.log('Adas data: ', snapshot.val());
}).then(function() {
    console.log('Transaction successfully committed!');
}).catch(function(error) {
    console.log('Transaction failed: ', error);
});

代码只是静默打印

Adas data: oldvalue 
Transaction successfully committed

然后退出

【问题讨论】:

  • 你看到的行为有什么问题?
  • 没有任何更新。我期待后端增加一个数据库查询'research_reports-published/' + rrid + '/' + field
  • 使用parameters that are passed into your then() function,这可能会给出提示。
  • 我添加了第二个回调,它打印Adas data: oldvalue,我该怎么做?
  • 请使用更新后的代码和输出更新您的问题。但请注意,您不必添加额外的回调,committedsnapshot 已经传递到您拥有的 then() 回调中。事实上,我什至不确定你是否可以同时传递回调和使用承诺。我从未尝试过。

标签: javascript angular firebase firebase-realtime-database angularfire2


【解决方案1】:

在上面的代码中发现了问题。应该是

if (fieldval != null) {
  fieldval = fieldval + 1;
}

因为 fieldval=0 也使它为假

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多