如何使用AngularFire $ asObject()检查Firebase中是否存在对象?

Dou*_*rea 4 angularjs firebase angularfire

我正在使用angularFire 0.8.2,我正在尝试检查用户的唯一性.

该用户存储在users/[id]中,其中[id]是用于登录/密码用户的simpleLogin生成的id和用于来自社交网络的社交uid(即:facebook:891239120).

因此,当我使用facebook登录时,我需要检查该用户是否已经在firebase中,所以我正在使用(来自angularFire-seed):

var userData = fbutil.syncObject('users/' + user.uid);
userData.$loaded()
         .then(function (data) {
         if(data) {
              console.log('EXISTS');
              console.log(data.$id);
         } else {
              console.log('NOT EXISTS');
         }
          }, function (err) {
              console.error(err);
          });
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为始终返回数据对象(即使对象没有关键user.uid不存在)

我发现obj.$ value在obj为空时填充为null,而当obj没有原始值时不存在,但我不确定这是否是检查它的正确方法.

而且我也不知道我是否使用$ asArray on/users它会在firebase上加载每个用户而不是生产它可能会出现性能问题?

Kat*_*ato 13

使用原始值(null为其中之一)时,AngularFire将它们存储在$ value键中.因此,要测试路径中的数据是否存在,您可以简单地执行:

data.$loaded(function() {
   var dataExists = data.$value !== null;
});
Run Code Online (Sandbox Code Playgroud)