为什么我的函数没有返回数组?

时间:2016-09-12 18:39:23

标签: javascript arrays return

这是我的代码:

document.getElementById('revealUser').onclick = displayDaUsers

function displayDaUsers(){
  pullAllUsersFromDB();
  debugger;
}


function pullAllUsersFromDB(){
  rootRef.child('users').on('value', function(snapshot) {
    var users_array = [];
    var users_object = snapshot.val();
    Object.keys(users_object).map(function(key) {
      users_array.push(users_object[key]);
    });
    // window.dateApp.allUsers = users_array;
    return users_array
  });
}

HTML:

<input type="submit" id="revealUser" value="reveal user">

我放了一个调试器来查看问题,但它没有帮助。当我进入控制台并输入users_array时 我得到Uncaught ReferenceError: users_array is not defined(…)

新法典(编辑):

根据另一个stackoverflow答案,这应该工作..

function displayDaUsers(){
  var test = pullAllUsersFromDB();
  console.log(test);
  //pullAllUsersFromDB();
  //debugger;
  //setUpFirstUser()
}


function pullAllUsersFromDB(){
  rootRef.child('users').on('value', function(snapshot) {
    var users_array = [];
    var users_object = snapshot.val();
    Object.keys(users_object).map(function(key) {
      users_array.push(users_object[key]);
    });
    //window.dateApp.allUsers = users_array;
    return users_array
  });
}

1 个答案:

答案 0 :(得分:0)

返回值users_array是匿名回调函数function(snapshot) {...范围的本地值。换句话说,它的价值在该范围之外就失去了。

您的逻辑中的哪一点需要访问user_array?如果需要在函数上下文之外访问它,可能有意义的是定义一个具有更大范围的变量,然后在匿名函数中设置它的值。 E.g。

document.getElementById...
var arr;

...

function pullAllUsersFromDB() {
    ...
    ...function(snapshot) {
        arr = users_array;
    });
}

// pullAllUsersFromDB() (and its callback) must be called for arr to be defined at this point in execution