我想下载多个json文件并将数据压缩到cookie。首先,我将它们保存到数组中,然后使用JSON.stringify()
来压缩它。
我试过了:
var files = [];
$.when(
['file1', 'file2', 'file3'].forEach(function (f) {
$.getJSON('/scripts/json/' + f + '.json', function (data) {
files.push(data);
console.log(files) // checking ok
})
})
).done(
console.log(files); // Oops... this line will be excuted before $.when()
$.cookie('files', JSON.stringify(files)) // compress before saving
)
正如您所看到的,jquery编译器无法确切知道文件下载完成的时间。
所以,我的问题是:如何wait
他们?
答案 0 :(得分:1)
您在$.when
内进行了迭代,但是您没有将延期传递回来,因此$.when
仅接收Array.forEach
返回的结果,undefined
始终为$.when(undefined).done();
,基本上你正在做的是
$.when
如果您使用apply
,则可以将数组传递给map()
,并使用forEach()
代替$.when.apply($,
['file1', 'file2', 'file3'].map(function (f) {
return $.getJSON('/scripts/json/' + f + '.json');
})
).then(function() {
var files = [].slice.call(arguments).map(function(x) { return x[0]; });
$.cookie('files', JSON.stringify(files)) // compress before saving
}, function(err) {
// failed
});
进行映射将返回Deferreds数组
lattice = np.array([[1, 0, -1, 0],
[0, 1, 0, -1],
[1, 0, 1, 0],
[0, 1, 0, -1]])