我正在将一个股票Web应用程序作为我的Bootcamp课程的一个项目,并试图按顺序依次运行异步api调用。我知道我使用的是forEach循环,我可能应该使用.reduce,并且有很多示例说明了如何在上下文之外使用reduce,但是由于我是javascript新手,所以我似乎无法将.reduce用于多个promise的概念性解释与在我的示例中实际应用之间的联系。
最初,我为每个URL进行了单独的访存和.thens处理,并很快意识到我需要在某种循环中对其进行重构。我遇到的问题是,我将数据推入的数组的顺序是随机的,因为承诺是异步解决的。在我的应用程序中,我进一步使用提取的数据通过Chart.js绘制图表,因此我需要按特定顺序排列我的数据,否则Google股价的数据就会绘制在苹果图上。
apple,google,tesla,brka,fb是存储提取的变量。我没有写这些,因为我的URL中有一个api键。
无论如何,下面是我的代码。非常感谢您的帮助。
Promise.all([apple, google, tesla, brka, fb])
.then((arrOfRes) => {
arrOfRes.forEach((response) => {
pushStockObjects(response.json())
});
});
// function that pushes object into array
const pushStockObjects = (json) => {
json.then((data) => {
let package = [];
let daily = [];
let timeSeriesArr = [];
let symbolSignifier = [];
let test = (data["Time Series (Daily)"]);
const entries = Object.entries(test)
for(let i = 0; i < 17; i ++) {
daily.push(entries[i][1]["4. close"]);
timeSeriesArr.push(entries[i][0]);
symbolSignifier.push(data["Meta Data"]["2. Symbol"])
}
package.push(daily.reverse());
package.push(timeSeriesArr.reverse());
package.push(symbolSignifier);
arrayOfDailyAndTimeArr.push(package);
console.log(arrayOfDailyAndTimeArr)
drawChart(arrayOfDailyAndTimeArr[0][1], arrayOfDailyAndTimeArr[0][0], 'rgba(196, 117, 246, 0.6)',
'rgb(196, 117, 246)', 'rgb(234, 241, 242)', 'Apple')
});
};