gpt4 book ai didi

javascript - 修改 s3.putObject 函数内的变量

转载 作者:行者123 更新时间:2023-12-03 02:13:40 28 4
gpt4 key购买 nike

我编写了以下代码来将文件上传到亚马逊 s3。

 var upload = async function() {

var uploadURLs = []
for (var i = 0; i < files.length; i++) {
fs.readFile(filePath, (error, content) => {
s3.putObject({
Bucket: bucketName,
Key: key,
Body: content
}, function(err, data){
.....
if (uploadCount == files.length - 1) {
uploadURLs = allUrls;
}
}
}
return uploadURLs
}

代码工作正常,但返回的数组 uploadURLs 为空,而 allUrls 不为空。您知道如何解决这个问题吗?我引用这个post我看不出有任何理由说明这不起作用。

最佳答案

您正在返回一个尚未设置的变量(在您的情况下为 uploadURLs),因为您正在异步回调函数中设置它。为了使其正常工作,您应该等待操作完成后再返回它。声明如下:

var upload = async function() {

根本没有帮助。你应该这样做:

var upload = function() {
return new Promise((success, fail) => {
var uploadURLs = []
for (var i = 0; i < files.length; i++) {
fs.readFile(filePath, (error, content) => {
if (error) {
return fail(error);
}
s3.putObject({
Bucket: bucketName,
Key: key,
Body: content
}, function(err, data) {
if (err) {
return fail(err);
}
.....
if (uploadCount == files.length - 1) {
uploadURLs = allUrls;
return success(uploadURLs);
}
}
}
});
}

实际上,在这种情况下,uploadURLs 可能完全没有必要。另一件事是,只有当您计划在异步函数中使用await时,才应该使用async。否则就浪费了。

关于javascript - 修改 s3.putObject 函数内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446196/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com