Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase push don';在价值事件中不工作_Javascript_Jquery_Firebase_Jquery Deferred - Fatal编程技术网

Javascript Firebase push don';在价值事件中不工作

Javascript Firebase push don';在价值事件中不工作,javascript,jquery,firebase,jquery-deferred,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');

我有这样的代码:

  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([]);
    }
  });
除非我使用开发者控制台,否则不工作,有人知道为什么吗

更新

如果我在没有jQuery延迟的情况下使用此代码,也会发生同样的情况

  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);
    }
  });

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

你能把它放在JSBin中吗?@DavidEast
  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);
    }
  });