Firebase推动不会在价值事件

时间:2015-09-16 16:46:10

标签: javascript jquery firebase jquery-deferred

我有这样的代码:

  var firebase = new Firebase('https://<MY_APP>.firebaseio.com');
  var users = firebase.child('users');
  var usersDefer = $.Deferred();
  var userName;
  if (window.localStorage) {
    userName = localStorage.getItem('username');
    if (!userName) {
      function newUser(users) {
        if (userName) return;
        var newUserName = prompt('Enter Username:');
        if (users.indexOf(newUserName) !== -1) {
          alert('Username already taken');
          newUser(users);
        } else {
          localStorage.setItem('username', newUserName);
          userName = newUserName;
          console.log('push');
          // this push don't work
          users.push({
            name: newUserName
          });
          console.log('after');
        }
      }
      usersDefer.then(newUser);
    }
  }
  users.once('value', function(snapshot) {
    var value = snapshot.val()
    if (value) {
      var users = Object.values(value).map(function(object) {
        return object.name;
      });
      usersDefer.resolve(users);
    } else {
      usersDefer.resolve([]);
    }
  });

users.push({
    name: newUserName
});
除非我使用开发者控制台,否则任何人都不知道为什么会这样做?

更新

如果我在没有jQuery Deferred

的情况下使用此代码,也会发生同样的情况
  users.once('value', function(snapshot) {
    function newUser(users) {
      if (userName) return;
      var newUserName = prompt('Enter your username');
      if (users.indexOf(newUserName) !== -1) {
        alert('Username already taken');
        newUser(users);
      } else {
        userName = newUserName;
        if (window.localStorage) {
          localStorage.setItem('username', newUserName);
        }
        console.log('push');
        users.push({
          name: userName
        });
        console.log('after');
      }
    }
    var value = snapshot.val()
    var users;
    if (value) {
      users = Object.values(value).map(function(object) {
        return object.name;
      });
    } else {
      users = [];
    }
    if (window.localStorage) {
      userName = localStorage.getItem('username');
      if (!userName) {
        newUser(users);
      }
    } else {
      newUser(users);
    }
  });

1 个答案:

答案 0 :(得分:0)

问题是我使用相同的变量users作为firebase引用和用户列表。