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]

全局变量值未定义。

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

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

使用承诺:

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

使用 async/await:

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

这个最小的代码工作:

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);
}
})();

最新更新