노드 js로 여러 파일을 복사하려고했습니다. 내가 소켓 오류를 걸어이Nodejs, 충돌없이 nodejs에 여러 파일을 복사하는 방법
var request = require('request');
va photos [{ 'url': 'http://xxxx.com/im1', 'name' : 'name1' }, { 'url': 'http://xxxx.com/im12', 'name' : 'name2' },
for (var i = 0; i < photos.length; i++) {
request(photos[i].source).pipe(fs.createWriteStream(photos[i].name));
}
전화 1000 어쩌면 후 :
여기에 내가 할 노력하고있어 내 예입니다.
다음 @Timothy Strimple advice에 비동기 모듈을 사용하기로 결정했습니다.
async.whilst(function() { return !stop; },
function (callback) {
console.log("get next 20 image");
JM.api('/' + album.id + '/photos', { after: next }, function (resf) {
if (!resf || resf.error) {
console.log(!resf ? 'error occurred' : resf.error);
}
console.log("albums" + album.id + " " + resf.data.length + " dir" + dir);
async.eachSeries(resf.data, function (photo, done) {
request(photo.source).pipe(fs.createWriteStream(dir + "/" +photo.name));
console.log("copy of image " + img_basename);
}, function (err) {
if (err) {
console.log('An images failed to copy');
} else {
console.log('All 20 image have been copied successfully');
}
if (resf.paging && resf.paging.cursors) {
console.log("suite de l'album à venir");
next = resf.paging.cursors.after;
setTimeout(function() { callback(); }, 5000);
}
else {
console.log("Fin de l'album");
stop = true;
setTimeout(function() { callback(); }, 5000);
}
});
});
},
function (err) {
if (err) {
console.log('An images failed to process');
albumcallback();
} else {
console.log('All images in this group have been processed successfully');
albumcallback();
}
}
);// end while
나는 여전히 복사 어쩌면 1 00 파일 후 충돌을 갖는
내 코드는 지금이 같은 것입니다. async.whilst와 async.eachSeries는 각각의 호출이 직렬로 연결되어 있다는 것을 보여주기 때문에 오류가 발생합니다. 하지만 나는 추락했다. 나는 다음과 같이 각 사본을 기다린 후에 잠시 proble을 풀었다 :
요청 모듈의 한계가 있습니까? 프로그램을 계속하기 전에 각 연결이 닫혀 있는지 확인하기 위해이 기능을 어떻게 변경합니까?
안녕하세요. 귀하의 anwser 주셔서 감사합니다. 내 코드가 좀 더 복잡하기 때문에 한 가지 더 많은 정보가 필요하다. 한 번에 모든 사진을 가져올 수는 없으므로 이미 일종의 반복 작업을하고 있으며 사진 20 장을 20 장씩 가져옵니다. 그래서 asyn.eachlimit을 여러 번 호출하면 작업을 수행 할 것입니까? 아니면 전화를 직렬화하지 않을 것입니까? 미리 감사드립니다. – mcbjam
처리 할 수있는 것들을 수백 가지가 넘게 처리하고 처리되는 속도를 제한하고 싶다면 eachLimit을 권장합니다. 그것은 본질적으로 당신이 시도한 것을 사진 그룹으로 나누어 대체 할 것입니다. 그룹 설정을 유지하려면 외부 루프에서 각 시리즈를 사용할 수 있습니다. 이는 첫 세트가 완료된 후에 두 번째 사진 그룹 만 처리한다는 것을 의미합니다. https://github.com/caolan/async#eachSeries –
감사합니다. 나는 그것을 시도 할 것이다. – mcbjam