从API JavaScript将对象存储在变量内

时间:2018-12-11 03:36:08

标签: javascript api url

我正在尝试存储从API返回的JSON对象。我将对象存储在一个名为obj的变量中,但是我无法弄清楚为什么我无法在函数中使用该变量来检索该对象的某些属性。

var obj;

btn_top.addEventListener("click", function () {
  fetch(url)
    .then(res => res.json())
    .then(data => obj = data)
    .then(() => console.log(obj))
  var profit = [];
  console.log("testing");
  console.log(obj);
  Object.values(obj).forEach(e=> {
    var eProfit = e.sell_average;
    profit.push(eProfit);
  });
  console.log(profit);
});

我收到以下错误消息。

main.js:46 Uncaught TypeError: Cannot convert undefined or null to object

使用时我能够正确返回obj

.then(() => console.log(obj))

但是之后我得到了错误。

谢谢。

3 个答案:

答案 0 :(得分:0)

obj是未定义的,因为解决Promise之前已执行日志记录和forEach循环,并且将obj分配为Promise的结果数据打电话。

在处理Promises(即异步代码)时,您需要在then()块中执行所有数据操作。

答案 1 :(得分:0)

您该怎么做! 提取是异步的,请阅读文档!

之后的下一行
  

.then(()=> console.log(obj))

在提取结束时未运行,但在此之前。

您的“下一个”代码必须位于最后一个Fetch回调中:

  fetch(url)
  .then(res => res.json())
  .then(jsonData=> {
    let profit = [];
    Object.values(jsonData).forEach(e=> {
      var eProfit = e.sell_average;
      profit.push(eProfit);
    });
  });

答案 2 :(得分:-1)