在javascript函数之外的数组未定义?

时间:2016-05-01 15:15:19

标签: javascript arrays firebase react-native undefined

我在React-Native中定义了一个从Firebase获取对象并将其内容推送到数组的函数。但是,虽然在调用'push'之后数组正在填充,但在for循环结束时它是未定义的。我不知道为什么它被清除了,因为我在for循环之外定义了数组,所以我想我会要求额外的一双眼睛,以防我遗漏任何东西。

    var newList = [];
    var arrayLength = userArray.length;
    for (var i = 0; i < arrayLength; i++) {

        var userRef = usersRef.child(userArray[i]);
        userRef.once('value', function(snap) {
            newList.push({
                name: snap.val().name,
                description: snap.val().description,
            });
            //this log statement prints out correct array
            console.log("NEWLIST" + newList[i]);
        });
        //but array is undefined here
        console.log("NEWLIST 2" + newList[i]);
    }
    this.setState({
        current: this.state.current.cloneWithRows(newList),
        past: this.state.past.cloneWithRows(oldList)
    });

2 个答案:

答案 0 :(得分:1)

阅读JavaScript的异步性质。 一次 功能会进行回调。外部作用域中的console.log在您向阵列推送任何项目信息之前执行。

答案 1 :(得分:1)

代码看起来不错,但我认为这里可能发生的是<textarea id="get_url" placeholder="Enter Your URL here" class="get_url_input" spellcheck="false" ></textarea> <input type="button" value="Share"> <div id="results"> </div> 是异步调用,而你的外userRef.once()首先被执行。当事件触发回调时,您的内部console.log会打印值