我试图将一些对象从此回调函数添加到全局数组中,以备后用。我遇到了代码异步性质的问题,我不明白为什么它不起作用。
对于两个数组 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
答案 0 :(得分:0)
全局数组arr
和dl
仅在调用传递给_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
}
)