如何从异步函数中获取数组的所有值

Posted

技术标签:

【中文标题】如何从异步函数中获取数组的所有值【英文标题】:How do I get all the values of an array from an async function 【发布时间】:2021-03-01 22:00:12 【问题描述】:

我想下载一个 XML 文件,将其转换为 JSON,填充一个数组,将值发送到不同的 API。

有效的东西:

下载多个 XML 文件 将其转换为 JSON 用所有值填充数组

我无法理解回调函数。下面的代码将输出:

加载中.. 34 完毕 34 完成

预计正在加载..34 完成

function fillArray(callback) 
    console.log("Loading..");

    for (let i = 0;i < urlArray.length; i++)
        
        xml2json(urlArray[i], (json) => 
            
            let myArray = findProp(json, "value");
            
            for(let i = 0; i < myArray.length; i++)
                myArrlabel.push(myArray[i]);
               
            
           
          callback();
        );
        
    
    
    //return myArrlabel;


function useArray()
    
    console.log(myArrlabel[15]);
    
    console.log("done");
    


fillArray(useArray);

回调在 for 循环中,这就是为什么我会得到上面的输出。这可能是一个愚蠢的问题,但我不明白如何正确编码。

编辑.. 添加 xml2json()

function xml2json(url, callback)
    http.get(url, (resp) => 
      let data = '';

      // A chunk of data has been recieved.
      resp.on("data", (chunk) => 
        data += chunk;
      );

      // The whole response has been received. Print out the result.
      resp.on("end", () => 

          let json = parser.toJson(data, options);
          callback(json);
      );

    ).on("error", (err) => 
      console.log("Error: " + err.message);
    );

【问题讨论】:

您在外部 for 循环中调用 callback() (useArray),我猜 urlArraylength 为 2。 你需要在 for 循环的最后一次迭代中调用它 此代码需要以不同的方式重写才能可靠地工作。我可以向您展示一种更好的编码方式,但我需要查看xml2json() 的文档或代码。你能提供吗? 新增xml2json函数。 【参考方案1】:

尝试添加一个 var,每次像回调一样加载数据时添加 1

【讨论】:

以上是关于如何从异步函数中获取数组的所有值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用网络库从函数外部获取更新值

从 useState 中的异步函数获取值

如何从具有嵌套对象数组的对象数组中获取所有特定值?

从作为异步任务运行的函数中获取值

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

如何从数组中获取随机值?