2016-07-24 3 views
0

스트림 구문 분석에 csv-parse을 사용하고 있습니다. 각 레코드에 대해 일부 함수 mapper.process()을 호출해야합니다. 후자의 함수는 약속을 반환하기 때문에 co으로 접두어를 붙이고 접두사는 yield입니다.던져진 오류를 Promise 외부에서 볼 수있게 만드는 방법은 무엇입니까?

추가없이
parser.on('readable', function() { 
    var record; 
    while (record = parser.read()) { 
    return co(function*() { 
     yield mapper.process(record); 
    }); 
    } 
}); 

에게 (제거 선 4, 6, yield는) 모든 것이 잘 작동합니다. 그러나 위에 표시된 구문 분석기를 사용하면 오류가 발생합니다.

해결 방법?

답변

2

여기서 문제는 co 함수 뒤에 catch 처리기가 없기 때문에 던져진 오류가 사라집니다.

더 중요한 것은 while 루프 내의 return 문은 전체 함수를 반환하므로 버퍼에 여러 레코드가있는 경우에는 도달하지 않습니다.

당신은 그것이 작동되도록하려면 다음 코드를 작성할 수 있습니다

parser.on('readable', function() { 
    return co(function*() { 
    var record; 

    while (record = parser.read()) { 
     const result = yield mapper.process(record); 

     // do something with the result.. 
     console.log('result is ', result); 
    } 
    }) 
    .catch((err) => console.error(err)); 
}); 

하지만, 당신은 "읽을 수"콜백 내부 비동기 코드을 취급하고 있기 때문에 유의하시기 바랍니다, 당신 함수가 즉시 반환됩니다. 이 동작으로 인해 스트림 끝에 파서가 "finish"이벤트를 호출하고 실제로 전에 이 호출되어 실제로 데이터 처리가 완료됩니다.

+0

니스 .................! –

관련 문제