我看了一些其他帖子,试图复制他们所做的,但他们似乎都没有遇到与我相同的问题。基本上,我试图存储S3存储桶中的密钥列表,以便在我的Vue应用程序中迭代它们。我有下面的代码,你可以看到我有3个控制台。记录我试图打印文件值的语句。第一个完全按照我的预期打印,而第二个打印,而第三个根本不打印。因此,出于某种原因,它没有将文件的值持久化到s3之外。listObjectsV2()函数,这意味着我无法访问应用程序中的实际文件本身。
let AWS = require("aws-sdk");
AWS.config.update({
accessKeyId: process.env.VUE_APP_ACCESS_KEY,
secretAccessKey: process.env.VUE_APP_ACCESS_KEY,
region: "us-east-1",
});
let s3 = new AWS.S3();
let params = {
Bucket: "my-bucket",
Delimiter: "",
};
let getS3Files = () => {
let files = [];
s3.listObjectsV2(params, function (err, data) {
if (data) {
data.Contents.forEach((file) => {
files.push({
fileName: file.Key,
fileDate: file.LastModified,
});
});
console.log(files);
}
});
console.log(files);
if (files.length > 0) {
files = files.sort((a, b) => b.fileDate - a.fileDate);
console.log(files);
}
return files;
};
getS3Files();
我不熟悉s3 api,但我知道listObjectsV2是一个异步操作,因此文件将为空,因为它发生在异步调用之外,并且在具有值之前执行
请试一试
let AWS = require("aws-sdk");
AWS.config.update({
accessKeyId: process.env.VUE_APP_ACCESS_KEY,
secretAccessKey: process.env.VUE_APP_ACCESS_KEY,
region: "us-east-1",
});
let s3 = new AWS.S3();
let params = {
Bucket: "my-bucket",
Delimiter: "",
};
let getS3Files = (callback) => {
s3.listObjectsV2(params, function (err, data) {
callback(data);
});
};
getS3Files((data) => {
const files = data.Contents.map((file) => ({
fileName: file.key,
fileDate: file.LastModified,
})).sort((a, b) => b.fileDate - a.fileDate);
return files;
});
在这种情况下,getS3Files
接收一个包含数据的回调,您将在函数调用中处理这些数据。
看看这个问题如何从异步调用返回响应?
这是因为您没有等到s3。listObjectsV2完成对其数据的提取。虽然<代码>s3。listObjectsV2似乎不是一个您应该等到它完成的函数,它需要时间向s3发送请求并获取您请求的数据。
在您提供的代码中,第二个控制台。日志很可能在第一个控制台之前执行。记录,到那时,您将不会有任何数据推送到文件中。因此,它将打印【】。在第三个日志之前,它会检查您的文件中是否有任何元素,因为
文件=[]
,因此该元素再次等于false。
所以,你需要把它包装在一个promise周围,等待它完成。
let getS3Files = async () => {
let files = [];
await new Promise(function (resolve, reject) {
s3.listObjectsV2(params, function (err, data) {
if (data) {
data.Contents.forEach((file) => {
files.push({
fileName: file.Key,
fileDate: file.LastModified,
});
});
console.log(files);
resolve();
} else {
reject(err);
}
});
});
console.log(files);
if (files.length > 0) {
files = files.sort((a, b) => b.fileDate - a.fileDate);
console.log(files);
}
return files;
};
await getS3Files();
问题内容: 我想捕获客户端JavaScript中的HTTP请求标头字段,主要是Referer和User-Agent。我该如何访问它们? Google Analytics(分析)设法通过将您嵌入到页面中的JavaScript来获取数据,因此绝对有可能。 问题答案: 如果要访问引荐来源网址和用户代理,客户端Javascript可以使用这些引荐来源网址和用户代理,但不能直接访问标头。 要检索引荐来源网址
问题内容: 我开始按照Android所没有使用的教程进行操作,并得到以下信息: 我想这可以归结为几个问题: 我没有创建自己的信任库,但是在网上搜索教程和其他内容时,不确定如何创建信任库。有没有一种方法可以创建或修改信任库以在其中存储所需的证书?(如果有任何不同,我使用的是自签名证书) 如何使SSL握手顺利进行?现在,我得到的错误是: 老实说,我真的不明白这意味着什么。 我需要在Android设备上
问题内容: 我试图弄清楚如何使用JavaFx。我在Scene Builder中构建了应用程序界面。但是我无法访问该组件,因为所有组件都已加载到Parent中。 如果我在“ Pane”上更改“ Parent”,则可以访问getChildren(),但是如果我知道fx:id …,还不清楚如何获得控制权。 问题更简单。我在Scene Builder中添加了Label或TextField。如果我知道fx:
问题内容: 是否可以通过注释处理器访问带有注释的元素? 是否可以通过注释处理器访问带注释的类型边界? 高度赞赏我错过的相关文档的链接。 内容: 注释: 一个示例类: 处理器: 在classpath 上使用编译以上内容将显示消息,但永远不会调用该方法。当方法参数中存在注释时,使用注释向处理器添加另一个注释可以正常工作。如果方法参数带有注释,则过程将再次忽略该元素。 问题答案: 该注释是有点棘手,因为
我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号
我很绝望。