노드를 올바르게 이해하면 수신기는 연결된 후에 발생하는 이벤트 만 수신합니다. missing.txt가 누락 된 파일이라고 가정합니다. 이 작품 :fs.createReadStream에서 발생한 오류를 수신 대기
'use strict';
const fs = require('fs');
var rs = fs.createReadStream('missing.txt');
rs.on('error', (err) => console.log('error ' + err));
그것은 생산하지 : 오류 오류 : ENOENT를 : 그런 파일이나 디렉토리를 열고 ... \ missing.txt
가 왜 작동합니까?
setTimeout(() => rs.on('error', (err) => console.log('error ' + err)) , 1);
을하지만, 5ms의 시간 초과를 변경하고 오류가 처리되지 않은 이벤트로 발생합니다 : 또한 다음과 같이 네 번째 줄을 변경하면 작동합니다.
이벤트 리스너 추가 지연이 짧으면 방출 된 오류를 잡기 위해 경쟁을 설정합니까? 그렇다면 스트림으로 열기 전에 파일의 존재 여부를 명시 적으로 확인해야합니까? 그러나 그것은 fs.exists와 관련하여 Node docs state과 같은 다른 경주를 만들 수 있습니다. "다른 프로세스는 두 번의 호출 사이에서 파일의 상태를 변경할 수 있습니다." Moroeover, 이벤트 리스너는 다른 오류를 잡아 내기 때문에 편리합니다.
명백한 지연을 도입하지 않고 이벤트 리스너가 존재하지 않는 파일을 스트리밍하려는 시도에서 오류를들을만큼 충분히 빠르게 추가된다고 가정하는 것이 가장 좋습니다.
좋은 답변입니다. 다음 틱의 의미를 이해하지 못하는 사람들을위한 [이벤트 루프] (http://stackoverflow.com/questions/21607692/understanding-the-event-loop)에 대한 자세한 내용은 다음과 같습니다. – Govdata1