我有一个名为“数据”的全局变量,正在forEach循环内进行修改。但是,由于循环是异步的,因此代码不会等到填充数据后再继续执行代码。这是使用JSZip库。
let data = [];
await zip.folder("folderName").forEach(async function (relativePath, file) {
let json = await zip.file(file.name).async("text");
data.push(json);
console.log(data.length); // prints increasing numbers
});
console.log(data.length); //prints 0
// need to do something with data but it is empty
在继续执行代码之前,如何等待数据数组填充?
forEach()
没有返回值,因此无法等待。您必须填充每个中的诺言数组,ZipObject#async()
并await
使用Promise.all()
来获得结果:
const promises = [];
zip.folder("folderName").forEach(function (relativePath, file) {
promises.push(zip.file(file.name).async("text"));
});
Promise.all(promises).then(function (data) {
// do something with data
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句