所以我有下面的JS函数,它将行添加到基于全局列表events
的表中。事件一开始是空的,我有另一个函数将dict对象推到其中。项目被成功推到列表中,但当events
到达fillTable()
时,它是空的。在下面的代码中,第一个console.log(events)
(在fillTable()
内部(打印一个空列表,但第二个console.log(events)
按预期打印数据。events
在其他地方没有定义,所以我迷失了方向。
events = []
function otherFunction(repo, type, url) {
events.push({'repo': repo, 'type': type, 'url': url})
}
function fillTable() {
console.log(events); // {}
console.log(events.length); // 0
var table = document.getElementById("table")
for (let i = 0; i < events.length; i++) {
let event = events[i];
const repo = document.createElement('td')
repo.appendChild(document.createTextNode(event['repo']));
const type = document.createElement('td')
type.appendChild(document.createTextNode(event['type']));
const url = document.createElement('td')
url.appendChild(document.createTextNode(event['url']));
const row = document.createElement('tr')
row.appendChild(repo);
row.appendChild(type);
row.appendChild(url);
table.appendChild(row);
}
}
otherFunction('a', 'b', 'c');
console.log(events); // {'repo': 'a', 'type': 'b', 'url': 'c'}
console.log(events.length); // 1
fillTable();
这是异步函数使用中的一个问题。
events = []
getGithubActivity();//this function makes an xmlHttp request
fillTable();//this function is called straight after. There has been no chance for a return of the xmlHttp request.
我建议像这个一样放置fillTable
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
try {
//add events
fillTable();
}
catch (e) {
console.log('getGithubActivity() - Error: ' + e);
}
}
};
当您在控制台中记录对象时。它将在打开时更新,这就是为什么它在您看来是填充的,即使在记录时长度为0。当您在控制台中打开它时,请求已经返回。
我还注意到eventList在任何地方都没有定义,这可能是打字错误吗?