javascript - 在循环中从异步函数获取数据
问题描述
我正在使用 JSZip 访问 zip 中的文件。在那个 .zip 中有一个我正在寻找的文件,我需要它的内容。要获取内容,它似乎需要一个异步函数。在 for 循环中被多次调用。
我的问题是,当我找到正确的文件时,我处于异步函数中,因此试图从主程序中获取值告诉我“未定义”。但是我不能在那个异步函数中继续我的代码,因为它是在循环中调用的,所以我会多次运行我的主程序。
var fileToFind;
JSZip.forEach(function (relativePath, file){
var fileAsStr = JSZip.file(relativePath).async("string"); //this is the way to get file content in JSZip
const waitStr = async () => {
fileAsStr = await fileAsStr;
const anchorStr = "Some string which is in only one file";
if(fileAsStr.indexOf(anchorStr) != -1){
fileToFind = fileAsStr;
console.log(fileToFind); //works ok
}
waitStr();
});
... //lot of stuff
console.log(fileToFind); //undefined
解决方案
为什么要在循环中定义一个函数?相反,您可以已经定义函数并在循环中调用。
var fileToFind;
const waitStr = async (fileAsStr) => {
fileAsStr = await fileAsStr;
const anchorStr = "Some string which is in only one file";
if(fileAsStr.indexOf(anchorStr) != -1) {
fileToFind = fileAsStr;
console.log(fileToFind); //works ok
}
}
JSZip.forEach(function (relativePath, file) {
var fileAsStr = JSZip.file(relativePath).async("string");
waitStr(fileAsStr);
});
// ...
推荐阅读
- android-studio - Kotlin 游乐场的结果窗格就像 Xcode 游乐场一样?
- docker - Kubernetes 弹性一体机在 arm64 机器上失败?
- ffmpeg - ffmpeg 如何混合 2 个单独随机启动和停止的 RTP 流?
- java - 通过 Servlet 读取和存储图像的有效方法(避免 DoS)
- python - 如何修改 Python 中预先存在的类以添加自定义方法?
- kibana - Kibana 时间未以正确格式显示
- zooming - 如何在将图像缩放到 ViewPager2 时扩展视图
- javascript - 显示表单不按照显示四个输入字段而不是两个的代码
- java - Checkstyle 命令行更改属性
- mysql - 如何使用子查询连接数据库的 5 个表