【问题标题】:Assigning API data to variable in Javascript [duplicate]在Javascript中将API数据分配给变量[重复]
【发布时间】:2019-11-26 03:09:04
【问题描述】:

我是 javascript 新手,我正在尝试使用 this package 在 React/Node.js 中对股票价格进行一些 API 调用。我已经知道如何获取所需的数据,但似乎无法将其分配给对象 (?) 以将数据转换为可用格式。

我的代码如下所示:

const alpha = require('alphavantage')({ key: 'myapikey' });

// Declare variable
let polishedData;

// Get API data
alpha.data.daily('msft', 'compact')
.then(data => {polishedData = alpha.util.polish(data)['data']});

console.log(polishedData); // returns undefined

api返回一个带有json格式数据的promise:

{
  '2019-11-25T00:00:00.000Z': {
    open: '262.7100',
    high: '266.4400',
    low: '262.5200',
    close: '266.3700',
    volume: '19242309'
  },
  ...
}

登录到控制台可以很好地显示数据,所以我知道至少那部分有效。

我试过只在前面添加var somedata = 或只是链接.then(data => { return data });(显然不使用console.log())但它不起作用。

我将如何将其分配给一个变量,以便我可以将数据操作为我的图形包的可用格式?对不起,如果这是一个愚蠢的问题,但我很茫然。

更新:添加了以下建议的更改。

【问题讨论】:

    标签: javascript json reactjs api


    【解决方案1】:

    您可以在 api 调用之外声明一个变量,并在它可用时为其分配 data

    // Declare a variable here.
    let allData;
    
    // Get API data
    alpha.data.daily('msft', 'compact')
        .then(data => {allData = alpha.util.polish(data))['data']});
    

    如果您使用 React,存储此数据的常见位置是 state

     constructor(props) {
        super(props);
        this.state = {data: []};
     }
    

    然后使用setState 来设置API调用的promise何时被解析:

    // Get API data
    alpha.data.daily('msft', 'compact')
        .then(data => {this.setState(data: alpha.util.polish(data))['data']}));
    

    【讨论】:

    • 谢谢。我实现了更改,但是如果我尝试记录 allData 变量,我仍然会得到 undefined。我已经用一个示例更新了主帖子,说明了当我只登录控制台时数据的样子,如果这有任何帮助的话。感谢您也包括如何在 React 组件中实现它!
    • 您的代码结构如何?您可以使用更改更新代码吗?
    • 我已经用代码更新了主帖,实际上只是试图弄清楚如何提取数据的那几行代码。但是,我想我想通了,因为这可能是由于 javascript (?) 的异步特性,所以 console.log() 在数据准备好之前被调用?我还尝试在最后链接另一个.then(console.log(polishedData));,但它不起作用。可能登录控制台不太合适,我只是很习惯用print语句来调试。
    • @dbm 你说得对,console.log 是在 promise 被解决之前执行的,这意味着在 ` PolishData` 获得其最终值之前打印日志。如果您使用.then(() => console.log(polishedData),它应该可以正确记录。
    • 是的,成功了。谢谢!我会在这个问题上多花点时间。
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2018-10-02
    • 2020-11-22
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多