【问题标题】:How to populate array with values from API using "fetch" in javascript function如何在 javascript 函数中使用“fetch”从 API 中填充值
【发布时间】:2021-03-22 20:10:42
【问题描述】:

我正在尝试编写一个函数来构建一个数组,其中数组的每个值都是使用唯一 url 从 API 中提取的值,一旦从 API 中获取该值,它就会被推送到现有数组中。

基本上,当调用该函数时,我想为列表中列出的每个股票代码填充一个获取的 API 数据的数组,但到目前为止我似乎没有工作

List: [
                { tick: "AAPL", datePurch: "01/01/2021"},
                { tick: "GOOG", datePurch: "01/01/2021"},
                { tick: "TSLA", datePurch: "01/01/2021"},
                { tick: "J", datePurch: "01/01/2021"},
                { tick: "AMZN", datePurch: "01/01/2021"},
                { tick: "FB", datePurch: "01/01/2021"},
                { tick: "BABA", datePurch: "01/01/2021"},
                { tick: "JNJ", datePurch: "01/01/2021"},
                { tick: "JPM", datePurch: "01/01/2021"},
                { tick: "XOM", datePurch: "01/01/2021"},
                ],

 totalPortfolio(){
        const arr = List.map((i) => (
            fetch(`${IEX.base_url}/stock/${i.tick}/intraday-prices?chartLast=1&token=${IEX.api_token}`)
                .then(response => response.json())
                .then(arr => arr.push(arr))
            ));
        console.log(arr);
    }
  

【问题讨论】:

    标签: javascript reactjs fetch


    【解决方案1】:

    您需要等待所有提取完成后再记录。

    将您的代码修改为 async/await 函数并添加所需的Promise.all()

    const List = [
      { tick: "AAPL", datePurch: "01/01/2021" },
      { tick: "GOOG", datePurch: "01/01/2021" },
      { tick: "TSLA", datePurch: "01/01/2021" },
      { tick: "J", datePurch: "01/01/2021" },
      { tick: "AMZN", datePurch: "01/01/2021" },
      { tick: "FB", datePurch: "01/01/2021" },
      { tick: "BABA", datePurch: "01/01/2021" },
      { tick: "JNJ", datePurch: "01/01/2021" },
      { tick: "JPM", datePurch: "01/01/2021" },
      { tick: "XOM", datePurch: "01/01/2021" },
    ];
    
    async function getIntradayPrice(tick) {
      const resp = await fetch(`${IEX.base_url}/stock/${tick}/intraday-prices?chartLast=1&token=${IEX.api_token}`);
      return resp.json();
    }
    
    async function totalPortfolio() {
      const respPromises = List.map(({ tick }) => getIntradayPrice(tick));
      const respArrays = await Promise.all(respPromises);
      console.log(respArrays);
    }
    

    【讨论】:

    • 感谢您的回复。当在地图函数中调用它时,我得到“'getIntradayPrice'未定义”。任何想法为什么?我已经在我的反应应用程序中为这些功能添加了绑定,但我仍然遇到同样的错误
    • 如果您遇到该错误,则意味着,嗯,就是这样。该函数未在您尝试使用它的范围内定义。
    • 您知道有什么方法可以在第二个函数的函数调用范围内获取“getIntradayPrice”函数吗?嵌套函数?我尝试了几个不同的选项,但它没有像上面写的那样工作
    • 上面的代码应该可以正常工作(如果你有IEX.base_url等可用)。
    • 看起来问题是我应该将这些方法作为类的一部分来访问(即 this.getIntradayPrice)。您的解决方案现在有效!谢谢
    猜你喜欢
    • 2021-12-24
    • 2020-12-15
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多