Javascript 使用angularfire:0.8.0时开始和结束未按预期工作

Javascript 使用angularfire:0.8.0时开始和结束未按预期工作,javascript,firebase,angularfire,firebasesimplelogin,Javascript,Firebase,Angularfire,Firebasesimplelogin,使用AngularFire 8.0 下面是使用startAt和endAt限制来自firebase的数据的代码 $rootScope.$on('$firebaseSimpleLogin:login', function(e, authUser){ var queryRef = ref.startAt(authUser.uid).endAt(authUser.uid); var queryArray = $firebase(queryRef).$asArray(); queryAr

使用AngularFire 8.0

下面是使用startAt和endAt限制来自firebase的数据的代码

$rootScope.$on('$firebaseSimpleLogin:login', function(e, authUser){

  var queryRef = ref.startAt(authUser.uid).endAt(authUser.uid);

  var queryArray = $firebase(queryRef).$asArray();

  queryArray.$loaded().then(function() {

    setCurrentUser(queryArray.$keyAt(0));

  });
});
返回的数据应该是来自firebase的单个元素,但当我使用console.log进行调试时,queryArray为空

在不使用startAt和endAt的情况下,queryArray包含存储在firebase中的所有元素。因此,记录queryArray。$keyAt(0)将第一个元素名称作为输出。这是意料之中的

我也检查了Firebase 8.0的发行说明,我没有看到这些限制器有任何变化

请指出是否存在任何语法错误或任何可达到预期结果的替代解决方案

我基本上想要Firebase中的一条记录,这是我的当前用户,authUser是以authUser.uid为优先级的授权用户

以下是用户注册时在Firebase中填充的JSON文件

{
  "users" : {
    "User A" : {
      "md5_hash" : "d10ca8d11301c2f4993ac2279ce4b930",
      "setPriority" : "simplelogin:69",
      "username" : "User A"
    },
    "User B" : {
      "md5_hash" : "2076105f6efe7c11e285add95f514b9a",
      "setPriority" : "simplelogin:70",
      "username" : "User B"
    },
    "User C" : {
      "md5_hash" : "a6d14de05d7b2c3cf4fae7ae14cfa7f3",
      "setPriority" : "simplelogin:71",
      "username" : "User C"
    }
  }
}
编辑后

使用以下代码获取优先级:

queryRef.once('value', function(nameSnapshot) {
  var val = nameSnapshot.getPriority();
  console.log("Priority is: " + val );
});
日志输出为:

优先级为:空

用于将用户添加到Firebase的方法是:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username,
    setPriority: authUser.uid
  };

users.$update(username, {
    md5_hash: authUser.md5_hash,
    username: username,
    setPriority: authUser.uid
    //$priority: authUser.uid
  }).then(function () {
    setCurrentUser(username);
  });

}, // end of create method

看起来所有数据的优先级都为空。这会阻止
endAt
startAt
正常工作

出现问题的线索是数据中存在
setPriority
键。优先级是在普通视图之外管理的元数据

将用户创建代码更改为以下内容:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username,
    .priority: authUser.uid
  };

} // end of create method
或者这个:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username
  };

users.$update(username, {
    md5_hash: authUser.md5_hash,
    username: username
  }).then(function (dataRef) {
    dataRef.setPriority(authUser.uid);
    setCurrentUser(username);
  });

} // end of create method

json中存在的“setPriority”键有点像根本原因的标志。我怀疑设置它的代码出了问题。你能分享你用来设置优先级的代码吗?另外,尝试显式获取优先级以验证它是否如预期的那样:@JennyTong我刚刚用设置优先级的代码编辑了上面的空格。而且,我试着获得优先权。我是AngularFire和Firebase的新手(大约一到两周),因此如果我在获取优先级时完全搞砸了,请原谅。也可以通过添加
。priority
作为密钥将优先级直接放入更新数据中。谢谢@kato。我已经把它整合到了答案中。