簡體   English   中英

使用異步方法從另一個 function 獲取信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM