I am new to nodejs. I have a for loop and it tries upload one file at a time from the filearray. For uploading, it calls a method which has promise pattern. So, the for loop continues to execute without waiting for the promise to be returned and so the order in which the files are uploaded are lost. Could anyone help me with this?
function uploadFiles(model, files){
var deferred = Q.defer();
var result = [];
async.eachSeries(files, function(currFiles, callback) {
async.eachSeries(currFiles, function(item, innerCallback) {
var fieldname = item.fieldname;
var tmp_path = item.path;
var _file = fs.readFileSync(tmp_path);
var fileuploaded = parseService.uploadFiles(model, fieldname,item.originalname, { base64 : new Buffer(_file).toString('base64')});
fileuploaded.then(function(data) {
result.push(data).then(function (res){
console.log('File upload success');
innerCallback();
}, function(err){
console.log('File upload fail');
innerCallback();
});
}, function(err) {
if (err) {
return deferred.reject(err);
}
console.log(result);
deferred.resolve(result);
});
}, function() {
callback();
});
return deferred.promise;
});
};
parseService.uploadFiles = function(fieldname, filename, file){
logger.verbose('On uploadFile');
var deferred = Q.defer();
var parseFile = new Parse.File(filename, file);
parseFile.save().then(function() {
return deferred.resolve();},
function(error) {
deferred.reject(err);
});
return deferred.promise;}
This is how my methods look. Currently the for loop keeps running and files are getting uploaded asynchronously and so getting uploaded in wrong order.