반응형
파이프 완료를 처리하기 위한 콜백
다음 node.js 코드를 사용하여 일부 URL에서 문서를 다운로드하여 디스크에 저장하고 있습니다.나는 그 문서가 언제 다운로드되는지 알고 싶습니다.저는 파이프가 있는 콜백을 본 적이 없습니다.또는 다운로드 완료 시 캡처할 수 있는 '종료' 이벤트가 있습니까?
request(some_url_doc).pipe(fs.createWriteStream('xyz.doc'));
스트림은EventEmitter
그래서 여러분은 특정한 이벤트를 들을 수 있습니다.당신이 말한 것처럼.finish
요청 이벤트(이전)end
).
var stream = request(...).pipe(...);
stream.on('finish', function () { ... });
사용 가능한 이벤트에 대한 자세한 내용은 스트림 설명서 페이지를 참조하십시오.
nodejs 문서인 http://nodejs.org/api/stream.html#stream_event_finish, 를 기반으로 쓰기 가능한 스트림을 처리해야 합니다.finish
사건의
var writable = getWriteable();
var readable = getReadable();
readable.pipe(writable);
writable.on('finish', function(){ ... });
웹에서 http를 통해 파일 시스템으로 콘텐츠를 파이핑하기 위한 코드 조각입니다.@starbeam 무지개 연구소에서 이벤트를 알아차림finish
일을 합니다.
var tmpFile = "/tmp/somefilename.doc";
var ws = fs.createWriteStream(tmpFile);
ws.on('finish', function() {
// pipe done here, do something with file
});
var client = url.slice(0, 5) === 'https' ? https : http;
client.get(url, function(response) {
return response.pipe(ws);
});
저는 이 맥락과 관련하여 제 문제에 대한 약간 다른 해결책을 찾았습니다.공유할 가치가 있는 생각.
대부분의 예제는 다음과 같습니다.readStreams
일렬 종대로하지만 제 경우에는readStream
에서 생성해야 합니다.JSON
메시지 풀에서 오는 문자열입니다.
var jsonStream = through2.obj(function(chunk, encoding, callback) {
this.push(JSON.stringify(chunk, null, 4) + '\n');
callback();
});
// message.value --> value/text to write in write.txt
jsonStream.write(JSON.parse(message.value));
var writeStream = sftp.createWriteStream("/path/to/write/write.txt");
//"close" event didn't work for me!
writeStream.on( 'close', function () {
console.log( "- done!" );
sftp.end();
}
);
//"finish" event didn't work for me either!
writeStream.on( 'close', function () {
console.log( "- done!"
sftp.end();
}
);
// finally this worked for me!
jsonStream.on('data', function(data) {
var toString = Object.prototype.toString.call(data);
console.log('type of data:', toString);
console.log( "- file transferred" );
});
jsonStream.pipe( writeStream );
다음은 요청 오류를 처리하고 파일이 작성된 후 콜백을 호출하는 솔루션입니다.
request(opts)
.on('error', function(err){ return callback(err)})
.pipe(fs.createWriteStream(filename))
.on('finish', function (err) {
return callback(err);
});
언급URL : https://stackoverflow.com/questions/11447872/callback-to-handle-completion-of-pipe
반응형
'source' 카테고리의 다른 글
WPF 목록 상자에서 수평 스크롤을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
---|---|
잘못된 요청 - Visual Studio 2013의 Asp.net WebAPI 프로젝트에서 잘못된 호스트 이름 (0) | 2023.05.29 |
MongoDB: 하위 문서 덮어쓰기 (0) | 2023.05.29 |
내용 발표자의 글꼴 패밀리를 변경하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
WPF 및 XAML의 숨겨진 기능? (0) | 2023.05.29 |