如何从异步函数中获取数组的所有值
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),我猜 urlArray
的 length
为 2。
你需要在 for 循环的最后一次迭代中调用它
此代码需要以不同的方式重写才能可靠地工作。我可以向您展示一种更好的编码方式,但我需要查看xml2json()
的文档或代码。你能提供吗?
新增xml2json函数。
【参考方案1】:
尝试添加一个 var,每次像回调一样加载数据时添加 1
【讨论】:
以上是关于如何从异步函数中获取数组的所有值的主要内容,如果未能解决你的问题,请参考以下文章