未解决的承诺援助Node.js



下面的代码是一个lambda函数,用于从s3Object zip文件中获取内容。我知道我没有解决承诺清单上的问题,需要一个关于如何解决的指导。我已经阅读了这里的几个代码,但很难将其应用于我的代码。如有任何协助,我们将不胜感激。

// dependencies
const AWS = require('aws-sdk');
var JSZip = require('jszip');
// get reference to S3 client
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
// Read options from the event parameter.
const srcBucket = event.Records[0].s3.bucket.name;
// Object key may have spaces or unicode non-ASCII characters.
const srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/+/g, " "));
// Download the file from the S3 source bucket. 
try {
const params = {
Bucket: srcBucket,
Key: srcKey
};
const data = await s3.getObject(params).promise();
var zip  = JSZip.loadAsync(data.Body).then(function (content){
return content;
});
zip.then(function(result){

var entries  = Object.keys(result.files).map(function (name) {
if(name.indexOf("TestStatus") != -1){ 
return name;
}
}).filter(notUndefined => notUndefined !== undefined);

var listOfPromises = entries.map(function(entry) {
return result.file(entry).async("text").then(function(fileContent){
return fileContent;

});
});
Promise.all(listOfPromises).then((values) =>{
values.forEach(function(value){
console.log(value);
});
});
}); 

} catch (error) {
context.fail(error);
return;
}  



};

修改/更正的代码

// dependencies
const AWS = require('aws-sdk');
var JSZip = require('jszip');

// get reference to S3 client
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
// Read options from the event parameter.
const srcBucket = event.Records[0].s3.bucket.name;
// Object key may have spaces or unicode non-ASCII characters.
const srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/+/g, " "));
// Download the file from the S3 source bucket. 
try {
const params = {
Bucket: srcBucket,
Key: srcKey
};
const data = await s3.getObject(params).promise();
var zip  = JSZip.loadAsync(data.Body);
return zip.then(function(result){

var entries  = Object.keys(result.files).map((name) =>{
if(name.indexOf("TestStatus") != -1){ 
return result.files[name];
}
}).filter(notUndefined => notUndefined !== undefined);

var listOfPromises = entries.map((entry) => {
return entry.async("text")
.then((u8) => {
return [entry.name, u8];
}).catch(error => console.error(error));
});
var promiseOfList = Promise.all(listOfPromises);

promiseOfList.then(function (list) {
console.log(list.toString());
});
});

} catch (error) {
context.fail(error);
return;
}  


};

如果你仔细观察,你没有重新调整任何东西,这就是它停留在挂起上的原因

const AWS = require('aws-sdk');
var JSZip = require('jszip');
// get reference to S3 client
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
// Read options from the event parameter.
const srcBucket = event.Records[0].s3.bucket.name;
// Object key may have spaces or unicode non-ASCII characters.
const srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/+/g, " "));
// Download the file from the S3 source bucket. 
try {
const params = {
Bucket: srcBucket,
Key: srcKey
};
const data = await s3.getObject(params).promise();
// here is the problem 
// var zip  = JSZip.loadAsync(data.Body).then(function (content){
//                return content;
//  }
var zip = await JSZip.loadAsync(data.body)
return zip.then(function(result){

var entries  = Object.keys(result.files).map(function (name) {
if(name.indexOf("TestStatus") != -1){ 
return name;
}
}).filter(notUndefined => notUndefined !== undefined);

var listOfPromises = entries.map(function(entry) {
return result.file(entry).async("text").then(function(fileContent){
return fileContent;

});
});
console.log("Helo");
Promise.all(listOfPromises).then((values) =>{
values.forEach(function(value){
console.log(value);
});
});
}); 

} catch (error) {
context.fail(error);
return;
}  



};
```

最新更新