Javascript 修改s3.putObject函数中的变量
我编写了以下代码将文件上传到AmazonS3Javascript 修改s3.putObject函数中的变量,javascript,node.js,Javascript,Node.js,我编写了以下代码将文件上传到AmazonS3 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:
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
}
var upload=async function(){
var uploadURL=[]
对于(var i=0;i{
s3.1对象({
Bucket:bucketName,
钥匙:钥匙,
正文:内容
},函数(错误,数据){
.....
if(uploadCount==files.length-1){
上传URL=allUrls;
}
}
}
返回上传的URL
}
代码运行正常,但返回的数组
uploadURLs
为空,而allUrls
则为空。您对如何解决此问题有何想法?Id我参考了这一点,我看不出任何不起作用的原因。您返回的是一个变量(在您的例子中为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);
}
}
}
});
}
var upload=function(){
返回新承诺((成功,失败)=>{
var uploadURL=[]
对于(var i=0;i{
如果(错误){
返回失败(错误);
}
s3.1对象({
Bucket:bucketName,
钥匙:钥匙,
正文:内容
},函数(错误,数据){
如果(错误){
返回失败(err);
}
.....
if(uploadCount==files.length-1){
上传URL=allUrls;
返回成功(上传URL);
}
}
}
});
}
实际上,在这种情况下,上传URL可能完全没有必要。另一件事是,只有当您计划在异步函数中使用wait时,才应该使用异步。否则这是一种浪费。allUrls在哪里设置?--它是在回调中设置的吗?