Я новичок в узле. Попытка создать сервис, который будет вызывать AWS для загрузки нескольких изображений и возврата ключей AWS клиенту. Здесь я использую Promise all, чтобы завершить все вызовы AWS и получить ключи AWS, а затем вернуть связку ключей клиенту.
Но я удивлен, что Promise.all() then() вызывается перед Promise resolve(). Очень нужна помощь. Простите меня за мой плохой код узла.
server.post('/photo', function (req, res, next) {
var form = new formidable.IncomingForm();
var result = [];
form.on('progress', function(bytesReceived, bytesExpected) {
console.log('err');
});
form.on('error', function(err) {
console.log('err',err);
});
form.on('end', function() {
console.log('ended!!!!', arguments);
});
form.on('aborted', function() {
console.log('aborted', arguments);
});
var urls = processAllFiles(form);
Promise.all([urls]).then(function(result) {
console.log('[][][]', urls);
}).catch(function (err){
console.log(err);
});
form.parse(req, function(err, fields, files) {
console.log('am at parse');
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n', urls);
res.end('received files:\n\n '+util.inspect(files));
})
return;
})
function processAllFiles(form) {
var result = [];
return new Promise(function (resolve, reject)
{ try{
form.onPart = function (part) {
const params = {
Bucket: 'xxxxx',
Key: uuidv4() + part.filename
};
var upload = s3Stream.upload(params);
upload.on('error', function (error) {
console.log('errr', error);
});
upload.on('part', function (details) {
console.log('part', details);
});
upload.on('uploaded', function (details) {
result.push(details);
console.log('uploaded', result);
})
part.pipe(upload);
}
resolve(result);
} catch(exception){
reject('error');
}
})
}