AWS s3.listBuckets将数据对象保存在全局变量 - nodejs中

时间:2018-06-10 12:10:50

标签: amazon-web-services amazon-s3 aws-sdk

我正在尝试读取帐户中的存储桶并将列表保存到可由其他功能访问的变量中。

我正在尝试使用全局变量。

结果: 全局变量值未保留/保存。

节点:v10 代码:

var AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});

s3 = new AWS.S3({apiVersion: '2006-03-01'});
let blist;
getBuckets();
console.log("list: " + blist);

async function getBuckets() {
     let response = await s3.listBuckets().promise();
      // do your processing
      var buckets = response.Buckets.map(x=>x.Name);
      console.log("buckets: " + buckets);
      blist = buckets;
      //return bnames;
}

输出:

Output:

(GV) List: undefined  (blist) 
(LV) Buckets: [all good]

全局变量值未定义。

有人可以帮帮我吗?我只需要从不同的函数访问存储桶名称列表。

2 个答案:

答案 0 :(得分:0)

s3.listBuckets是一个异步函数,因此当您分配给变量时,您将无法获得预期的结果。你最好考虑使用promises链接它们或使用async/await

使用承诺:

s3.listBuckets().promise()
       .then((response) => {
          // do your processing
        });

使用async / await:

async function someFn() {
     let response = await s3.listBuckets().promise();
      // do your processing
}

答案 1 :(得分:0)

这个最少的代码有效:

import S3 from "aws-sdk/clients/s3.js";

const main = async () => {
  const s3 = new S3({ apiVersion: "2006-03-01" });

  const buckets = await s3.listBuckets().promise();
  console.log(JSON.stringify(buckets));
};

(async () => {
  try {
    await main();
  } catch (e) {
    console.error(e);
  }
})();