【问题标题】:Variable not getting set from within function未从函数内部设置变量
【发布时间】:2020-09-03 04:34:09
【问题描述】:

我来自 Python 背景,几乎没有 JavaScript 经验,所以在这里我有点不了解我的元素。

我正在尝试做一些看似简单的事情,获取一个 AWS 账户 ID 并将其存储在一个变量中。我引用了来自this StackOverflow question 的代码,但我对其进行了一些修改。

var account =  sts.getCallerIdentity({}, function (err, data) {
    if (err) {
        console.log("Error ", err)
    } else {
        account = data.Account.toString();
        console.log(account);
        return account

    }
});
//console.log(account);

如果我将 console.log 语句注释掉,我会看到 AWS 账户 ID 打印到控制台,这正是我所期望的。但是,如果我取消注释该行,我会得到一个正在打印到控制台的非常大的对象(我假设它实际上是 data 变量)。

我只希望 account 变量等于帐户 ID。我在这里做错了什么?

【问题讨论】:

  • 好吧,我会将var account 更改为let account(或const)并在else 中只做return data.Account.toString();,但是你需要从if 也是如此,例如。 return null那里
  • 不幸的是,这也不起作用。我得到的结果与原始问题中的结果相同。
  • 好吧,我们不知道 sts.getCallerIdentity 到底做了什么

标签: javascript node.js aws-sdk-js


【解决方案1】:

该函数是异步的,因此您无法真正分配值。该值会在未来某个时间在回调中解析。此时console.log 已经执行完毕。

您可以做两件事,在回调中添加需要account 的逻辑或使用承诺。

sts.getCallerIdentity({}).promise().then((data) => console.log(data));
sts.getCallerIdentity({}, (err, data) => {...stuff});

请记住,这些值将在未来某个时间得到解决。

【讨论】:

    【解决方案2】:

    在运行回调之前,不会使用您需要的数据设置帐户变量。也许试试这样的?

    var account = sts.getCallerIdentity({}, function (err, data) {
        if (err) {
            console.log("Error ", err)
        } else {
            account = data.Account.toString();
            doOtherStuff();
        }
    });
    
    function doOtherStuff() {
      console.log(account);
    }

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多