2017-07-14 159 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鍵。我正在努力做到這一點。你能幫我嗎? –