【问题标题】:Cannot access data returned from axios outside of function [duplicate]无法访问从函数外部的axios返回的数据[重复]
【发布时间】:2021-07-22 13:36:57
【问题描述】:

我正在尝试访问 Microsoft Azure 管理 API,并且已经到了可以 console.log() 来自我的 axios 调用的数据的地步。

我不知道该怎么做,如何将我的 axios 调用包装在一个函数中,然后稍后检索该数据?

我的代码如下。请注意,我在控制台中看到了从 MS api 返回的数据,正如我所期望的那样。


// Express setup code, module imports, env variables, etc.
// ...

function getAzureToken() {

    // Set up credentials, auth url and request body, axios config
    // The API authenticates properly, so it is not relevant to include
    // ...

    var data = {};
    axios.post(authEndpoint, config)
        .then(result => {
            console.log(result.data) // Logs the expected data (auth token) in my console
            data = result.data
        })
    
    return data 
}

// Index API endpoint
app.get('/', (req, res) => {

    let token = getAzureToken()

    // Prints out this in my browser: {}
    res.send(token)

})


任何人都可以帮助菜鸟吗?

【问题讨论】:

    标签: javascript node.js express axios


    【解决方案1】:

    你需要在 .then 方法中返回来提取值。

    // Express setup code, module imports, env variables, etc.
    // ...
    
    async function getAzureToken() {
    
        // Set up credentials, auth url and request body, axios config
        // The API authenticates properly, so it is relevant to include
        // ...
    
        return await axios.post(authEndpoint, config)
            .then(result => {
                console.log(result.data) // Logs the expected data (auth token) in my console
                return result.data
            })
    }
    
    // Index API endpoint
    app.get('/', async (req, res) => {
    
        let token = await getAzureToken()
    
        // Prints out this in my browser: {}
        res.send(token)
    
    })
    

    【讨论】:

    • 这仍然不允许我在调用 getAzureToken() 后访问数据。只是显示为空
    • return axios.post() 返回一个 Promise,为了从 Promise 中获取数据,您必须使用 async/await 或 then() let token = getAzureToken().then((token) => { res.send(token) })
    • 你是对的 Nikita - 我已经编辑了代码以正确异步工作 :-) 尝试更新版本,@user5860749
    • 不客气!不要忘记为下一个访问这里的人标记为正确;)(我可以看到您的帐户是新帐户)。我很欣赏赞成票!祝你好运
    • 我将能够在 2 分钟内将其标记为正确,会的!
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多