source

파이프 완료를 처리하기 위한 콜백

factcode 2023. 5. 29. 11:13
반응형

파이프 완료를 처리하기 위한 콜백

다음 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

반응형