顺序Api调用多个URL

时间:2019-05-31 15:07:56

标签: javascript node.js

我正在将一个股票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')
  });
};

0 个答案:

没有答案