내 코드는 학교 데이터베이스에서 내 보낸 다섯 개의 파일을 다운로드 한 다음 첫 번째 내보내기를 기반으로 쿼리를 실행합니다 (다른 네 개의 파일에 대한 쿼리가 있으며 세 개의 학교가 있으므로 내 기능을 확장해야합니다) .함수는 여전히 비동기 적으로 호출됩니다. 내가 도대체 뭘 잘못하고있는 겁니까?
"다운로드"라는 기능과 "updateSchedule"이라는 기능이 있습니다. 이 두 기능은 별도로 작동합니다.
var download = function(file){
var deferred = q.defer();
var i = 1;
var ftpGet = function(){
var number = i++;
toString(number);
filename = file+number+'.csv';
ftp.get(filename, filename, function(hadErr){
if (hadErr){
console.error('There was an error retrieving ' + filename);
}else{
console.log(filename + ' downloaded');
if(i <= 5){
ftpGet();
}else{
deferred.resolve();
}
}
});
}
ftpGet();
return deferred.promise;
}
var updateSchedule = function(school, school_id){
var deferred = q.defer();
console.log('');
connectionpool.getConnection(function(err, connection){
if(err){
console.error('CONNECTION error: ', err);
}else{
connection.query('DELETE FROM schedule WHERE school_id = "'+school_id+'"', function(err, rows){
if (err) console.error(err);
var path = './'+school+'_export1.csv';
var reader = csv.createCsvFileReader(path, {'separator': ',','quote': '"','excape': '"','comment': ''});
reader.addListener('data',function(data){
connection.query('INSERT INTO schedule SET section_id = "'+data[0]+'", student_id = "'+data[1]+'", course_number = "'+data[2]+'", period = "'+data[3]+'", teacher_id = "'+data[4]+'", school_id = "'+school_id+'"', function(err, rows){
if (err) console.error(err);
deferred.resolve();
});
});
});
connection.release();
console.log(school+' schedule updating...');
}
});
return deferred.promise;
}
내가 약속을 사용하여 전화
그러나, 나는 그것이 파일을 열 수 없다는 오류가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
오류 메시지를 게시하십시오. – Shaun
시작하려면'filename'을 암시적인 전역이 아닌 지역 변수로 만드십시오. 그런 다음 아무 것도하지 않거나 오류를 일으키고 다른 문자열에 추가 될 때 숫자가 자동으로 문자열로 변환되기 때문에 어쨌든 필요하지 않으므로'toString (number)'를 제거하십시오. – jfriend00
은'ftpGet()'선언을'download()'와 분리하여'ftpGet (fileName)'이 하나의 파일 만 잡고 가져올 수 있도록합니다. 'download()'는 여러 개의'ftpGet()'호출을하고 이에 따라 정보를 처리합니다. – theoperatore