javascript - 在js中为数组中的每个元素调用fetch函数时的异步问题
问题描述
我有这个js代码:
_fetchData = (id, callback) => {
let url = 'https://.../id=' + id
fetch(url)
.then(response => response.json())
.then(data => callback(data))
}
_addToArray = (array) => {
let dataArray = []
array.forEach(item => {
_fetchData(item.id, (data) => {
dataArray.push(data)
})
}
return dataArray
}
我想dataArray = [data1, data2, ...]
但它是dataArray = []
有什么解决办法?非常感谢
解决方案
如果你不介意使用异步代码,因为 `fetch:
_fetchData = (id) => {
return fetch(`https://.../id=${id}`)
.then(response => response.json());
}
_addToArray = (array) => {
return Promise.all(array.map(item => _fetchData(item.id)));
}
或者简单地说:
_addToArray = (array) => {
return Promise.all(array.map(item =>
fetch(`https://.../id=${item.id}`).then(r => r.json())));
}
推荐阅读
- kubernetes - 存储类是 Kubernetes 中的集群级对象吗?
- c# - C# 为 HWND_BROADCAST 找到已经运行的应用程序实例窗口句柄
- java - 使用 Jackson 从 URL 解析 JSON 数据时返回空值
- r - 使用 data.table 中的集合更改多列
- javascript - 如何以编程方式启用“-ms-high-contrast”媒体查询?
- r - 使用池包在闪亮的应用程序中超出数据库连接限制
- mongodb - 为 Bson.M mongodb 创建自定义 mashler/unmashler 时出错
- elasticsearch - 弹性搜索中的自定义时间序列索引
- graphql-codegen - 突变后更新缓存:类型'{名称:任何;属性'名称'不存在; } | 无效的'
- php - 刷新 PHP 数据数组而不重新加载页面