javascript - 如何使用异步 foreach 遍历 json 数据?
问题描述
我有一个基本的 json 对象,如下所示,它跟踪与我的应用程序相关的信息。我有一个保存为字符串的 Blob URL,我需要使用 FileReader API 访问并转换为 base64 字符串。
我之前尝试过使用 for 循环,并且在大多数情况下效果很好。但最大的问题是 FileReader 逻辑是异步的,每次 for 循环运行时,FileReader 似乎都被完全跳过导致值变为undefined
.
我听说 foreach 方法在运行异步函数时可能会产生更好的结果,所以我决定试一试。但我不确定如何引用数组中的特定字段。我需要执行两次循环,一次用于“mask_b64”,然后一次用于“spr_b64”,以将base64字符串绑定到数组并导出/下载json字符串。
{
"objects": {
"0": [
{
"name": "ads",
"mask_b64": "none",
"mask_offset_x": 0,
"mask_offset_y": 0
}
],
},
"sprites": {
"0": [
{
"name": "RunNew",
"basename": "RunNew_strip10.png",
"spr_b64": "blob:https://mywebsite.net/e417be39-48a1-4feb-889b-fbbb73279f02",
"frames": 10,
"spr_offset_x": -1,
"spr_offset_y": -1,
"spr_speed": 0
}
]
}
}
这是我的其他脚本,包括文件阅读器
changeBlobToBase64(temp_json_text.sprites[0])
function changeBlobToBase64(jsonArray)
{
for (i = 0; i<=(jsonArray.length)-1;i++)
{
var blob_url = jsonArray[i]['spr_b64'];
var new_image = blobToBase64(blob_url);
console.log(new_image);
jsonArray[i]['spr_b64'] = new_image;
}
}
我的 FileReader 脚本
function blobToBase64(imgUrl)
{
var str_to_return;
var request = new XMLHttpRequest();
request.open('GET', imgUrl, true);
request.responseType = 'blob';
request.onload = function()
{
var reader = new FileReader();
reader.readAsDataURL(request.response);
reader.onload = function(e)
{
str_to_return = e.target.result;
return str_to_return;
alert(str_to_return)
}
};
request.send();
}
解决方案
推荐阅读
- intellij-idea - 如何编写 Intellij 插件来显示来自静态分析的 Python 类方法返回值(对于非常简单的表达式)?
- jupyter-notebook - 无法在 Windows 10 的 jupyter notebook 中启动 ocaml-jupyter 内核
- javascript - 关于 JavaScript 代理和 getter 函数的奇怪问题
- php - MAMP Pro 3.3.1 为 windows 用户添加新的 PHP 版本
- javascript - 何时使用 AbortController 移除事件监听器?
- c++ - CComPtr 分配是线程安全的吗?
- react-native - 从反应本机应用程序向 Auth0 api 发出请求
- html - 如何在 CSS3 网格中将一个单元格覆盖在其他两个单元格上
- java - 从 Flutter 调用 Java 代码会引发未处理的异常:MissingPluginException(未找到方法的实现...)
- javascript - 切换时不显示菜单