Firebase对非写入操作保证什么事件顺序?

时间:2016-05-04 23:55:33

标签: javascript firebase firebase-realtime-database firebase-authentication

firebase文档包含写操作的事件保证:“来自单个客户端的写入将始终写入服务器并按顺序广播给其他用户。”

但是我没有找到任何关于非写操作的信息,即读或auth事件。 我考虑以下用例:

需要对我的Firebase数据库进行身份验证,因此在应用程序初始化时我会这样做:

>>> f(a)
array([ 13.,  14.,  15.])
>>> f(a)
array([ 17.,  18.,  19.])
>>> f(a)
array([ 21.,  22.,  23.])
>>> f(a)
array([ 25.,  26.,  27.])

}

然后,如果必须呈现第一个HTML,则将从Firebase中获取所需的数据:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.authWithPassword({
  "email": "bobtony@firebase.com",
  "password": "correcthorsebatterystaple"

因此,我的应用程序保证在检索数据之前发生身份验证调用。

Firebase是否保证在进行读取之前完成身份验证?或者,由于初始化尚未完成,读取是否会因权限错误而失败?

1 个答案:

答案 0 :(得分:0)

没有这样的保证,也不需要。您可以在authWithPassword()调用上使用完成侦听器来获取订购保证。来自Firebase documentation for authWithPassword()

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.authWithPassword({
  "email": "bobtony@firebase.com",
  "password": "correcthorsebatterystaple"
}, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    console.log("Authenticated successfully with payload:", authData);
  }
});

您可以在最后once()个区块中附加else个侦听器。

同样,您可以在身份验证发生时(或状态更改)使用onAuth()侦听器。来自Firebase documentation for onAuth()

ref.onAuth(function(authData) {
  if (authData) {
    console.log("Authenticated with uid:", authData.uid);
  } else {
    console.log("Client unauthenticated.")
  }
});

再次,您将在else块中附加您的听众。

两个示例之间的区别在于,第一个回调仅在用户进行主动身份验证时触发,而第二个回调也在例如页面重新加载时触发。使用哪一个,取决于您的应用程序。