Javascript jquery中的异步foreach
我正在尝试使用c3js显示一些图表。 我遇到了需要“暂停”foreach循环以及循环中的异步操作的问题。 我可以通过添加一个空警报来破解它,该警报允许“工作”完成(请参见下面代码中的警报)。我如何解开它并使其工作? 按下按钮时会调用showData功能Javascript jquery中的异步foreach,javascript,jquery,foreach,Javascript,Jquery,Foreach,我正在尝试使用c3js显示一些图表。 我遇到了需要“暂停”foreach循环以及循环中的异步操作的问题。 我可以通过添加一个空警报来破解它,该警报允许“工作”完成(请参见下面代码中的警报)。我如何解开它并使其工作? 按下按钮时会调用showData功能 selectedFiles = []; function showData(){ displayChart(selectedFiles,function(cols){ alert("");//fix
selectedFiles = [];
function showData(){
displayChart(selectedFiles,function(cols){
alert("");//fixme
//display chart
chart = c3.generate({
bindto: '#chart',
data: {
columns: cols,
type:'bar'},
bar: {
width: {
ratio: 0.5
}
}
});
});
}
function displayChart(files,completionHandler)
{
var columns = [];
$.each(files, function( index,value) {
//create array with file name, and averageDuration
var fileName = value + ".json";
var averageDuration;
$.getJSON(fileName, function(json) {
averageDuration = json.averageDuration;
var col = [value,averageDuration];
columns.push(col);
});
});
completionHandler(columns);
}
因为ajax是异步的,所以不能这样使用它
function displayChart(files, completionHandler) {
var src = $.map(files, function (value) {
var fileName = value + ".json";
return $.getJSON(fileName);
});
$.when.apply($, src).done(function (data) {
var columns;
if (files.length > 1) {
columns = $.map(arguments, function (array, idx) {
return [[files[idx], array[0].averageDuration]]
});
} else {
columns = [
[files[0], data.averageDuration]
]
}
completionHandler(columns);
})
}
演示:您试过了吗?这在控制台中给了我以下信息:“TypeError:item[0]未定义”现在我得到的是“array未定义”。所以数组的内容应该是我从$.getJSON读取的json,对吗?我想读取文件的json内容,然后将其添加到这样的数组中[fileName,averageDuration]-示例:['file1',13456]@jacob你能在
var columns=$.map(arguments,…)
之前添加一个console.log(arguments)
吗,2:Object,callee:displayChart,proto:Object}让我们来看看。