저는 nodejs를 처음 사용합니다. 나는 for 루프를 가지고 있으며, 한 번에 하나의 파일을 filearray에서 업로드하려고 시도한다. 업로드의 경우 약속 패턴을 갖는 메소드를 호출합니다. 따라서 for 루프는 약속이 반환되기를 기다리지 않고 계속 실행되므로 파일을 업로드하는 순서가 손실됩니다. 누구든지 이걸 도와 줄 수 있니?Nodejs for 루프가 동기식으로 변경됨
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;}
내 방식이 다음과 같습니다. 현재 for 루프가 계속 실행 중이며 파일이 비동기 적으로 업로드되어 잘못된 순서로 업로드되고 있습니다.
[지연된 반 패턴] (http://stackoverflow.com/q/23803743/1048572)을 피하십시오! – Bergi
동기화할 수 없으며 약속은 항상 비동기입니다. 업로드를 순차적으로 실행해야합니까? 아니면 평행하게 잘 수행할까요? – Bergi
지금 순차적으로 실행하고 싶습니다. 왜냐하면 내가 병렬 (비동기)을 실행하면 업로드 순서가 바뀌기 때문이다. – user3339128