node. js 비동기 함수 에서 반전 함수 의 이상 처리

2428 단어 NodeJS
솔직히 여기 서 완벽 한 해결책 을 제시 할 수 는 없고 god 가 오 기 를 기다 리 고 있 을 뿐이다.
현재 이런 실제 적 인 문제 에 부 딪 혔 다.
디 렉 터 리 에 포 함 된 파일 이름 을 가 져 오 려 면 디 렉 터 리 를 비동기 로 읽 어야 합 니 다. 예 를 들 어 다음 과 같 습 니 다.

func = (dir) ->
fs.readdir dir, (err, files) ->
if err exist then deal with the err
do sth.

크게 나 무 랄 것 이 없 는 것 처럼 보이 지만 이런 요구 가 있다 면:

func1 = (dir) ->
fs.readdir dir, (err, files) ->
do sth. without dealing with the error and just throw them out of this function

func2 = (arg) ->
try
func1 arg
catch err
deal with the err

이 뜻 은 fs. readdir 에 있 는 err 입 니 다. 저 는 처리 하고 싶 지 않 습 니 다. func 2 에서 던 진 오 류 를 통일 적 으로 처리 하고 싶 습 니 다. 이렇게 하려 면 문제 가 없 을 것 입 니 다. 그러나 문 제 는 func 2 가 fs. readdir 에서 던 진 이상 을 영원히 포착 하지 못 하 는 것 입 니 다. 이 유 는 호출 된 func 1 에서 비동기 함 수 를 사 용 했 기 때 문 입 니 다. 이상 은 이 비동기 함수 에서 던 진 것 입 니 다. 던 진 후에...fun 1 이 실 행 됐 을 수도 있 습 니 다. func 2 는 말 할 것 도 없고 누가 이 이상 을 맡 습 니까? -god, 물론 god 는 그 (그녀?) 의 수하 인 node 를 보 냈 습 니 다. node 는 화가 나 서 "할아버지, 감히 잠 을 자라 고 떠 들 어 요" 라 고 말 했 습 니 다. 그래서 이 앱 을 총살 하 자 우리 의 응용 도 중단 되 었 습 니 다.
'자 바스 크 립 트 비동기 프로 그래 밍' 이라는 책 은 처음 읽 었 을 때 비동기 함수 의 이상 처 리 를 보 았 지만 좋 은 해결 방법 을 제시 하지 않 은 것 같 았 다. p24 에 서 는 "전체 애플 리 케 이 션 이 작 동 을 멈 추 게 하려 면 용감하게 throw 를 사용 하 세 요. 그렇지 않 으 면 오 류 를 어떻게 처리 해 야 할 지 진지 하 게 고려 해 보 세 요" 라 고 말 했다.
응용 을 멈 추 라 고? 나 를 죽여 라. 동기 화 방법 으로? 나 를 죽여 라. 비동기 함수 의 리 턴 함수 에서 이상 한 처 리 를 하 라 고? 나 를 죽여 라.
여기에 해결 방법 이 하나 있다.
fun 1 에서 new emitter 는 비동기 방법 으로 호출 된 리 셋 함수 에서 emitter 에 error 이 벤트 를 등록 하고 fun 1 의 마지막 에 이 emitter 를 되 돌려 줍 니 다. func 2 에서 변 수 를 할당 하여 error 이 벤트 를 감청 하고 다른 처 리 를 합 니 다. 코드 는 다음 과 같 습 니 다.

events = require 'events'
func1 = (dir) ->
emitter = net events.EventEmitter()
fs.readdir dir, (err, files) ->
return emmitter.emit 'error', err if err?
do sth.
emitter

func2 = (arg) ->
event = func1 arg
event.on 'error', (err) ->
deal with the err

더 좋 은 해결 방법 이 있 는 지 모 르 겠 습 니 다. 전에 [url =http://deadhorse.me/nodejs/2013/04/13/exception_and_domain.html] Node. js 비동기 이상 처리 와 domain 모듈 분석 [/ url], 아직 자세히 보지 못 했 습 니 다.
more:
[url=http://cnodejs.org/topic/515acf7a6d3827730615715e] 이상 처리 에 대한 교훈 중 하 나 는 비동기 반전 이 무엇 인지 다시 한 번 이해 합 니 다. [/ url]

좋은 웹페이지 즐겨찾기