我写了以下代码将文件上传到亚马逊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我认为没有任何理由说这不起作用。
答案 0 :(得分:1)
您正在返回一个尚未设置的变量(在您的情况下为uploadURLs),因为您在asyc回调函数中设置它。为了使其正常工作,您应该在返回操作之前等待操作完成。以下声明:
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);
}
}
}
});
}
实际上在这种情况下,uploadURL可能完全没必要。另一件事是,只有在计划等待异步函数时才应使用异步。否则它就是浪费。