如何从 Nodejs 中的 promise 中获取价值

How to grab value from promise in Nodejs

您好,我正在 Azure 函数中编写一个 nodejs 代码来捕获保存在 Azure 密钥保管库中的用户名。 这是我写的代码

module.exports = async function (context, req) {
    var msRestAzure = require('ms-rest-azure');
    var KeyVault = require('azure-keyvault');

    function getKeyVaultCredentials() {
        return msRestAzure.loginWithAppServiceMSI({
        resource: 'https://vault.azure.net/'
     });
    }

    function getKeyVaultSecret(credentials) {
        let keyVaultClient = new KeyVault.KeyVaultClient(credentials);
        return keyVaultClient.getSecret('https://myDNS.vault.azure.net/', 'username', '');
    }


const username = getKeyVaultCredentials()
 .then(getKeyVaultSecret)
 .then(function (secret){
 context.log(`Your secret value is: ${secret.value}.`);
    return secret.value;})
 .catch(function (err) {throw (err);});

context.log(username) 
    context.res = {
        body: username 
    };
}

我想获取用户名,但它给我的输出是

promise {pending}

如何等待函数结束以便提取用户名。

我是 nodejs 新手,请让我知道我做错了什么以及确切的解决方案。

谢谢

其实你已经用then获取了秘值。如果依赖和配置没有问题,将返回该值。

getKeyVaultCredentials()
 .then(getKeyVaultSecret)
 .then(function (secret){
 context.log(`Your secret value is: ${secret.value}.`);
    return secret.value;})
 .catch(function (err) {throw (err);});

但是你在使用这个sdk的时候会遇到一些问题,here是github的问题,供你参考。

建议您使用新的 Azure Key Vault SDK instead. It is more convenient to use. 是在 Azure 中使用 MSIKey vault 的详细步骤功能。