javascript - 如何返回在 Javascript/Node 中填充了 ASYNC 函数的数组的值?
问题描述
我用谷歌搜索和搜索,似乎无法从我发现自己的这个湿纸袋中脱身。
我有一个导出函数,它从 web api 中获取一堆数据,然后我们对这些数据做一些事情,返回并获取更多数据,最后返回一个 javascript 对象。至少这是计划。我的一切工作正常,直到我必须将数据从模块发送回我的主 app.js 文件。
这是我希望成为我的函数的相关代码......我省略了很多,但我认为它不相关。
//SNIP
let airportBoards = [...results];
const updateBoards = () => {
airportBoards.forEach(airport => {
console.log(airport)
boardTypes.forEach(board => {
let currentOffset = airport[board].next_offset;
(async function () {
while (currentOffset > 0) {
await getOffsetData(airport.airport, board, currentOffset) //axios request
.then(res => {
currentOffset = res.data.AirportBoardsResult[board].next_offset
newFlights = res.data.AirportBoardsResult[board].flights
console.log(currentOffset)
let index = airportBoards.findIndex(r => r.airport === airport.airport)
airportBoards[index][board].flights.push(...newFlights)
})
}
})()
})
})
}
最终,我需要做的是从中获取“airportBoards”的内容。据我所知,一切都在工作,它遍历偏移量,并调用直到没有更多数据返回。而且我可以看到 airportBoards 数组正在使用调试工具正确更新......一旦所有异步/等待的东西都解决了,我就是不知道如何使用它(airportBoards)。
提前道歉......我知道它不漂亮......我只是希望我在这里提供了足够的信息让有人帮我一把。
提前致谢!
解决方案
您可以使用Promise.all
等待所有承诺解决:
let airportBoards = [...results];
const updateBoards = () => {
let arrayOfPromises = [];
airportBoards.forEach(airport => {
console.log(airport)
boardTypes.forEach(board => {
let currentOffset = airport[board].next_offset;
let promise = (async function() {
while (currentOffset > 0) {
await getOffsetData(airport.airport, board, currentOffset)
.then(res => {
currentOffset = res.data.AirportBoardsResult[board].next_offset
newFlights = res.data.AirportBoardsResult[board].flights
console.log(currentOffset)
let index = airportBoards.findIndex(r => r.airport === airport.airport)
airportBoards[index][board].flights.push(...newFlights)
})
}
})();
arrayOfPromises.push(promise);
});
})
Promise.all(arrayOfPromises).then(() => { /* finish - do whatever you want */ });
}
推荐阅读
- jasper-reports - 使用 iReport 在变量中设置值并在组中进行比较
- python - Pandas 系列到 Python 中的数据框
- android - 如何在表格布局中精确对齐项目?
- c++ - 如何从字符串开头到第二个分隔符提取子字符串?
- c# - 使用 DB2 和 .NET 进行异步查询
- python - 谷歌语音识别同时连续收听和转录
- selenium - 无法为 Chrome Windows 执行 Selenum Grid
- python-3.x - 尝试新数据集时特征不匹配。模型特征多于输入特征
- javascript - 方法未定义 - Jasmine
- asp.net - Asp Net Boilerplate - 为什么它自动设置 isEmailConfirmed 是真的