2017-07-14 248 views
1

我有以下代码从AWS S3中检索对象。将从承诺返回的数据分配给变量对象

我该如何将承诺返回的数据分配给files对象?

我希望能够将files变量传递给下一个.then中的另一个方法,因为我想访问数据。

var getFiles = function getFiles(files) { 
    return Promise.all(files.map(function (file) { 
     return new Promise((resolve, reject) => { 
      var params = { 
       Bucket: 'my-bucket', 
       Key: file.key 
      }; 

      s3.getObject(params, function (err, data) { 
       if (err) reject(err); 
       else { 
        resolve(data); 
       } 
      }); 
     }); 
    })); 
}; 


var fileNames = ['test.jpg', 'background.jpg']; 
var files = fileNames.map(function(fileName) { 
    return { 
     key: fileName 
    } 
}); 


getFiles(files) 
    .then(function(res) { 
     console.log(res) 
    }) 
    .catch(function(res) { 
     console.log(res); 
    }); 
+0

将'then'中的'console.log(res)'改为'files = res' – lilezek

回答

1

Promise.all(...).then应在then处理器从s3.getObject返回解决承诺返回值的迭代,所以res应该是返回值的数组。

files是全球性的,所以你应该能够从then回调直接引用它:

getFiles(files) 
    .then(function(res) { 
     console.log(res); 
     console.log(files); // [{key: 'test.jpg'}, {key: 'background.jpg'] 
    }) 
    .catch(function(res) { 
     console.log(res); 
    }); 

如果files受到getFiles通话之间的突变,你可以通过解决它作为其传递函数链Promise.all()的第一个参数然后访问它作为res[0]

+0

在getFiles函数中,我想将getObject中的数据添加到一个files.data键。我正在努力做到这一点。你能帮我吗? –