如何将异步获取的响应存储到数组对象

时间:2019-04-22 23:33:11

标签: node.js asynchronous fetch

我有一个异步功能,可以成功检索json对象,但是我不能将此输出存储在我想在函数本身之外使用的数组/变量中。 问题不在于控制台记录输出,而是将输出存储在“ myObject”中 就像可以使用的普通JSON对象一样。

    "use strict"
    const fetch = require('node-fetch')


    async function getValue() {

      let response = await fetch('https://api.pro.coinbase.com/products/btc-eur/ticker')

      let value = await response.json()

      return value
    }

    getValue().then(function(value) {myObject = value})

如上所述,不能以这种方式分配myObject变量。我仍然在努力处理异步和回调,甚至我都知道回调和事件循环是如何工作的!我的解决方案是将此Web请求的内容另存为JSON文件,这也是我想做的。将来如果我需要这些数据,可以在全球范围内提取。

  const fetch = require('node-fetch')
  const fs = require('fs')

async function getValue(callback) {

  let response = await fetch('https://api.pro.coinbase.com/products/btc-eur/ticker')

  let value = await response.json()

  return value
}

getValue().then(result => {
  console.log(result)
  const dataJSON = JSON.stringify(result)
  fs.writeFileSync('coinbase-web.JSON', dataJSON)
})

现在数据已安全地存储在JSON文件中,我现在可以从该文件中创建一个对象,甚至更好,我应该能够直接在Excel中解析此数据,这是我的下一步。

3 个答案:

答案 0 :(得分:0)

getValue().then(function(value) {
    console.log(value)
 /* How store completed output as a global object? */});

您需要等待响应,然后登录

答案 1 :(得分:0)

不,对不起。因为代码是异步的,所以不可能。

您必须使用then方法处理它

getValue().then(value => { 
  console.log("value:", value);
});

或使用Self-Executing Anonymous Function

(async () => {
  console.log("values:", await getValue());
})();

答案 2 :(得分:0)

第一个错误与异步响应无关。

您正在使用use strict指令,该指令要求声明所有变量-但是在尝试分配给变量时尚未声明myObject

只需声明它,然后取消注释您的诺言处理代码的第一行,它看起来应该可以工作-然后在then()事件主体的内部控制台日志(否则,您将在异步过程完成之前记录值)。

请参见https://www.w3schools.com/js/js_strict.asp

var myObject;
getValue().then(function(value) {
  myObject = value;
  console.log(myObject);
  // you must handle myObject here, not in the synchronous code outside
});

//console.log(myObject); //this will not work because it does not wait for your then function to complete.

如果您仍然不确定如何使用结果,请阅读这份出色的指南:https://javascript.info/async-await