Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将axios返回的json保存在变量中?_Javascript_Node.js_Debugging_Npm_Axios - Fatal编程技术网

Javascript 如何将axios返回的json保存在变量中?

Javascript 如何将axios返回的json保存在变量中?,javascript,node.js,debugging,npm,axios,Javascript,Node.js,Debugging,Npm,Axios,我想将从axios返回的json保存到一个变量中。目前,我只能在使用以下代码输入console.log(response.data)时才能看到它: function status() { const url = "https://api.com"; axios.get(url).then(function (response) { console.log(response.data); }); } status(); // console.logs obj

我想将从axios返回的json保存到一个变量中。目前,我只能在使用以下代码输入console.log(response.data)时才能看到它:

function status() {
  const url = "https://api.com";
  axios.get(url).then(function (response) {
    console.log(response.data);
  });
}
status(); // console.logs object successfully
如果我只是将response.data设置为一个变量而不是记录它,它将保持为空({})。 我想这样做:

let data = {};
function status() {
  const url = "https://api.com";
  axios.get(url).then(function (response) {
    data = response.data;
  });
}
status();
console.log(data); // {}
// I want to manipulate and use the properties of data in subsequent code here

请问我怎样才能做到这一点?谢谢您的帮助。

函数
axios.get(url)
返回一个
承诺。您可以像这样使用
async/await

 async function status() {
  const url = "https://api.com";
  let response = await axios.get(url);
  return response.data;
}

status().then((data) => console.log(data));


Axios执行异步操作。任何异步操作总是在执行所有同步操作之后执行。在此处阅读有关JavaScript执行的信息:

长话短说,最后的
console.log
语句是一个同步操作,它总是在
axios(…)之前执行。然后执行
回调

JavaScript有一个新特性,称为
async…wait
,它允许您像常规JavaScript语句一样按顺序运行承诺。但请注意,它仍然是异步执行

异步函数状态(){
常量url=“…”;
consrresp=等待axios.get(url);
返回相应的数据;
}
status().then(data=>console.log(data));
在常规JavaScript中,这相当于:

功能状态(){
常量url=“…”;
返回axios.get(url)。然后((resp)=>{
返回相应的数据;
});
}
status().then(data=>console.log(data));
编辑:要在外部存储访问数据,请将所有内容包装在自执行异步函数中,并执行以下操作:

(异步()=>{
让数据;
功能状态(){
常量url=“…”;
返回axios.get(url)。然后((resp)=>{
返回相应的数据;
});
}
数据=等待状态();
控制台日志(数据);
})();
axios.get(url)是一个异步方法,这意味着它不会返回结果,而是返回一个(一个表示“它没有结果,但我最终会得到结果”的对象)。要得到结果,你必须等待

您有多个选项,第一个选项是使用.then()(不推荐使用)

第二种方法需要使用async/await。Async用于定义异步方法,wait用于等待异步方法。您只能在异步方法中使用wait(因为您必须等待)

但是,如上所述,如果您在top模块函数中(例如,如果您不在方法中,正好在.js文件中),则可以使用如下立即调用的函数:

(async () => {
  const result = await axios.get(url);
  console.log(result);
)();

这回答了你的问题吗?不熟悉axios,但您是否尝试过使用async/await?可能是console.log()在axios实际返回之前就启动了。另外,最好是从status()函数返回数据。要做到这一点,请在函数中弹出数据变量,并在axios调用完成后返回它。谢谢,但我尝试此操作时出错:“SyntaxError:await仅在异步函数中有效”谢谢。但不完全是我想要的。如何在status.then()之后将数据保存为变量,如下所示:
let obj={};状态()。然后((数据)=>(obj=数据));控制台日志(obj)只有在异步操作完成后才会保存它。。。您只能访问
然后
回调中的
数据
。但您可以将代码封装在自执行异步函数中,并使用wait on
status
函数来解决您的问题。检查我对答案的编辑。
const result = await axios.get(url);
console.log(result);
(async () => {
  const result = await axios.get(url);
  console.log(result);
)();