尽管控制台显示了完整的数组,但无法访问数组索引,数组长度返回0

时间:2018-11-05 19:31:34

标签: javascript arrays asynchronous get

我试图将一些对象从此回调函数添加到全局数组中,以备后用。我遇到了代码异步性质的问题,我不明白为什么它不起作用。

对于两个数组 dl arr ,我无法访问它们的索引,并且控制台声称它们的长度为0。但是,在chrome dev-tools中,我可以查看一个下拉列表应该是数组中大约1000个对象。

例如,

dl [0] arr [0] 返回未定义

我应该提到所有这些都在我的React应用程序的 componentDidMount()中。我之所以要创建数组而不是仅设置状态,是因为该函数已嵌入并在此处的get方法中,并且无论如何以后都需要访问索引。

let dl =[];
let arr=[];

_globalobject.get(
    "/SOME/URL.PARAMETERS/HERE",
    function(response) {
        // authenticated user
        _globalobject.user = response;
        for (let i=0; i < response.results.length; i++) {
            dl.push(response.results[i])
            arr.push(i)
        }
    }
)
console.log(dl, typeof(dl), dl.length) // [] > , 'object', 0
console.log("regular array", arr[0]) // regular array, undefined

1 个答案:

答案 0 :(得分:0)

全局数组arrdl仅在调用传递给_globalobject.get()的回调之后填充数据。

当前,通过console.log()登录到控制台会立即发生(即,在执行回调之前),这就是为什么通过控制台将数组报告为空的原因。

尝试将console.log调用移至回调函数的末尾,以便在用数据填充数组时进行记录,如下所示:

let dl =[];
let arr=[];

_globalobject.get(
    "/SOME/URL.PARAMETERS/HERE",
    function(response) {
        // authenticated user
        _globalobject.user = response;
        for (let i=0; i < response.results.length; i++) {
            dl.push(response.results[i])
            arr.push(i)
        }

        // Log to console, when the callback is executed. There
        // should now be data in these arrays, which will cause
        // the console to log expected output
        console.log(dl, typeof(dl), dl.length) // [] > , 'object', 0
        console.log("regular array", arr[0]) // regular array, undefined
    }
)