Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改s3.putObject函数中的变量_Javascript_Node.js - Fatal编程技术网

Javascript 修改s3.putObject函数中的变量

Javascript 修改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:

我编写了以下代码将文件上传到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: 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在哪里设置?--它是在回调中设置的吗?