完成回调未在 firebase 3.0.2 中的 set 方法上执行

Posted

技术标签:

【中文标题】完成回调未在 firebase 3.0.2 中的 set 方法上执行【英文标题】:Completion callback not executing on set method in firebase 3.0.2 【发布时间】:2016-05-19 09:40:05 【问题描述】:

在我的 Nodejs 应用程序中,我正在尝试使用如下所示的 firebase 3.0.2 模块将一些数据设置到我的名为“回调”的 firebase 位置。

var firebase = require('firebase');
firebase.initializeApp(
      serviceAccount: "path/to/serviceAccountCredentials.json",
      databaseURL: "<My firebase url>"
);

var db = firebase.database();
var callbackref = db.ref("callback");

console.log("Before Call");

callbackref.set("Some data", function (error) 
   console.log("Callback Executed");
);

console.log("After Call");

执行上述代码后,我可以在控制台中看到如下消息

"Before Call"
"After Call"

我可以在我的“回调”位置看到我的 Firebase 控制台中的更新数据,但这里唯一的问题是我从未在我的控制台中收到“回调已执行”消息。

我的 Nodejs 版本是 5.5.0 操作系统是 Windows 10

我的问题是从未执行过完成回调。我在这里错过了什么?

【问题讨论】:

您好 Ashok,这里没有足够的内容来重现您的错误。请参阅creating an mcve 并包含尽可能多的细节。 @Kato 编辑了我的问题。问题是完成回调从未执行,但我可以在 Firebase 控制台中看到更新的数据。 你在这里的代码对我有用。当然,“回调执行”日志发生在其他两个之后,因为它是异步的。 【参考方案1】:

在 3.0.3 中修复了一个错误,该错误会导致您的代码运行,但如果在没有适当权限的情况下提供无效服务帐户,则身份验证会静默失败。尝试升级到版本 3.0.3 并尝试通过firebase.database.enableLogging(true) 打开调试。我感觉您需要通过说明here 重新生成您的服务帐户 JSON 文件。

【讨论】:

我对 firebase 3.14.0 上的 update() 方法有同样的问题。【参考方案2】:

使用set返回的Promise -

var usersRef = ref.child("users");  //ref is my root location  
dataRef.set("I'm writing data")
.then(function()
    alert("Data saved successfully.");
)
.catch(function(error)
    alert("Data could not be saved." + error);
);

【讨论】:

感谢您的回复。它不适用于在 Windows 10 上运行的服务器端 nodejs 应用程序。

以上是关于完成回调未在 firebase 3.0.2 中的 set 方法上执行的主要内容,如果未能解决你的问题,请参考以下文章

MonoTouch - UIView.Animate 完成回调未在按钮 touchUpInside 委托内调用

jQuery-File-Upload 未在 Internet Explorer (IE9) 中触发完成回调

Firebase“设置”完成回调未触发

Firebase 完成回调如何在 Kotlin 中工作

Flutter Firebase:Firebase 中的数据更新,但未在屏幕上自动显示计数器更新

Firebase 中的观察者未在 swift 应用程序中调用