[英]get info from a another function with an async method
我正在嘗試從 JSON 列表 (response.data) 中獲取所有 ID,並將其返回到主 function。但是我如何使用異步方法從另一個 function 獲取信息?
我真的不明白這個...
這是我的代碼:
var axios = require('axios');
async function get_info() {
let config = {
method: 'get',
url: 'https://.../api/records',
headers: {
'x-api-key': '...'
},
params: {
}
};
await axios(config)
.then(function (response) {
var data = JSON.stringify(response.data);
var data_array = data.split(',');
var count = 0;
const list_id = [];
for (i = 0; i < data_array.length; i++) {
if (data_array[i].includes('"id":')) {
list_id[count] = data_array[i];
count++;
}
}
console.log("list_id.length on function = " + list_id.length);
return list_id;
})
.catch(function (error) {
console.log(error);
});
}
async function main() {
console.log("Hi!");
list_id = await get_info();
console.log("list_id.length on main = " + list_id.length);
}
main();
我得到了這個:
PS C:\Users\Enzo\Documents\dev\passerelle>node .\script.js
Hi!
list_id.length on function = 200
C:\Users\Enzo\Documents\dev\passerelle\script.js:84
console.log("list_id.length = " + list_id.length);
^
TypeError: Cannot read properties of undefined (reading 'length')
at main (C:\Users\Enzo\Documents\dev\passerelle\script.js:84:47)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Node.js v18.12.1
我不明白為什么我之前做等待時它是“未定義的”。
當你使用async
/ await
時,不要使用.then()
。 如果沒有回調, return
語句實際上將從get_info
返回,而不是從.then()
回調返回。
async function get_info() {
const response = await axios({
// ^^^^^^^^^^^^^^^^^^^^^^
method: 'get',
url: 'https://.../api/records',
headers: {
'x-api-key': '...'
},
params: {}
});
var data = JSON.stringify(response.data);
var data_array = data.split(',');
var count = 0;
const list_id = [];
for (var i = 0; i < data_array.length; i++) {
if (data_array[i].includes('"id":')) {
list_id[count] = data_array[i];
count++;
}
}
console.log("list_id.length on function = " + list_id.length);
return list_id;
// ^^^^^^
}
async function main() {
try {
console.log("Hi!");
const list_id = await get_info();
console.log("list_id.length on main = " + list_id.length);
} catch(error) {
console.log(error);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.