首页 > 解决方案 > 在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 = []

有什么解决办法?非常感谢

标签: javascriptasynchronous

解决方案


如果你不介意使用异步代码,因为 `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())));
}

推荐阅读