Javascript 如何将axios返回的json保存在变量中?
我想将从axios返回的json保存到一个变量中。目前,我只能在使用以下代码输入console.log(response.data)时才能看到它: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
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 onstatus
函数来解决您的问题。检查我对答案的编辑。
const result = await axios.get(url);
console.log(result);
(async () => {
const result = await axios.get(url);
console.log(result);
)();