首页 > 解决方案 > 将从另一个文件导入的异步函数的返回值存储为可以在 elseware 中引用的变量

问题描述

我正在使用 Azure rest api。调用 Azure Rest API 时的第一个任务是您需要获取访问/持有者令牌。

我所做的是我有一个名为 utils.js 的文件,其中包含以下异步函数。

实用程序.js

async function get_bearer_token(tenant_id, client_id, client_secret) {
    console.log('Getting Bearer Token');
    let token_url = `https://login.microsoftonline.com/${tenant_id}/oauth2/token`;
    let data = {
        'resource': 'https://management.core.windows.net',
        'client_id': client_id,
        'client_secret': client_secret,
        'grant_type': 'client_credentials'
    };
    let config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    };

    let bearer_token;
    await axios.post(token_url, qs.stringify(data), config).then(({data}) => {
        bearer_token = data.access_token});
    return bearer_token;
};

这可以正常工作并按预期返回 Bearer_token。我的问题,对于 JS 来说是全新的并将其用作培训练习,是我有我的主代码文件,我已经将此函数导入该文件并尝试取回不记名令牌。

我只会以未决的承诺告终。我正在尝试做一些事情,例如:

let bearer_token;
get_bearer_token(process.env.TENANT_ID, process.env.CLIENT_ID, process.env.CLIENT_SECRET).then(data => {bearer_token = data});
console.log(bearer_token);

我将多次需要这个不记名令牌来完成我的其他任务。上面的代码从函数调用返回一个未决的承诺,但当我尝试在此之后记录变量时未定义。我可以让这一切正常工作,但我最终陷入了回调地狱,我很肯定必须有更好的方法,我只是看不到它。

如何将一个文件中的异步函数的返回值设置为另一个文件中我实际调用此异步函数的变量?

标签: javascriptasync-awaitpromise

解决方案


推荐阅读