【问题标题】:Fix "Variable is used before being assigned" error修复“变量在分配之前使用”错误
【发布时间】:2020-10-21 22:32:21
【问题描述】:

从下面我的代码sn-p,

import { STS } from 'aws-sdk'

const sts = new STS({
    region: 'us-east-1'
});
let accessKeyId: string
let secretAccessKey: string

sts.assumeRole(params, function(err, data) {
    if (err) {
        console.log(err, err.stack);
    } else {
        accessKeyId = data.Credentials?.AccessKeyId || '';
        secretAccessKey = data.Credentials?.SecretAccessKey || '';
    }
}); 

console.log(accessKeyId);
console.log(secretAccessKey);

VS 代码显示“变量 'accessKeyId' 在被分配之前已被使用”。我需要在assumeRole() sdk 调用之外访问这两个变量...如何确保当时设置了变量?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    accessKeyId 在分配之前被使用,因为对于打字稿,无法保证您的日志在执行回调之前运行。在不知道 assumeRole 做什么的情况下,它接受回调这一事实意味着它可能是异步的,因此几乎肯定会有一些延迟。

    因此,如果您需要使用accessKeyId,您应该在回调中设置后分配一次。

    【讨论】:

      【解决方案2】:

      在返回块中工作,以便它只在数据返回后处理。

      {
      if (err) {
          console.log(err, err.stack);
      } else {
      
          accessKeyId = data.Credentials?.AccessKeyId || '';
          secretAccessKey = data.Credentials?.SecretAccessKey || '';
      //work here
          }
      }); 
      

      建议 2 在使用变量之前放入一个等待异步完成的函数

      【讨论】:

      • 所以我只需要将assumeRole() 调用封装在async 函数中?
      • 不,您需要在调用信息之前先返回数据,否则您将始终得到 nil 或 undefined 的错误
      • 从.assumeRole里面更新你需要的地方,从那里调用一个需要更新的函数
      猜你喜欢
      • 2016-04-07
      • 2019-12-15
      • 2019-11-06
      • 2021-08-16
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多