首页 > 解决方案 > AWS s3.listBuckets 将数据对象保存在全局变量中 - nodejs

问题描述

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

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

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

节点: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]

全局变量值未定义。

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

标签: amazon-web-servicesamazon-s3aws-sdk

解决方案


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

使用承诺:

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

使用异步/等待:

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

推荐阅读