【发布时间】:2019-01-20 08:18:21
【问题描述】:
我有一个名为“data”的全局变量,它正在 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
在继续代码之前如何等待填充数据数组?
【问题讨论】:
-
查看 api,
forEach看起来不是异步的,所以向它发送一个承诺是行不通的,它期待一个回调.. -
@JJJ 不是真的。大多数答案和“很多很多其他人”会建议使用
map(),这不是这里的选项,或者使用for循环手动迭代集合,如果不对内部结构做出假设,这也是不可能的API。 -
我看不到这里怎么不能使用地图。
-
@JJJ 可能想先查看 API,然后再将其作为重复项关闭。返回值不是一个数组,它是一个特定于 API 的对象。
标签: javascript typescript jszip