2014-03-19 2 views
9

async.js 모듈을 많이 사용하는 대형 node.js 응용 프로그램이 있습니다.)node.js async.js nextTick 대 setImmediate

async.series([ 
    function(callback){ 
     sql.update(query, callback); 
    }, 
    function(callback){ 
     if (something){ 
      sql.update(query2, callback); 
     } 
     else{ 
      callback(null); 
     } 
    } 

] :

이 같은 코드를 많이 가지고

큰 문제는 else 문에서 동기식 콜백입니다. 나는 예기치 않은 결과를 초래할 수 있기 때문에 async.js로 그렇게해서는 안되는 것을 잠깐 읽었지 만, 가장 좋은 대안이 무엇인지 모르겠습니다. 나는 어떤 곳에서 process.nextTick을 사용해야한다고 읽었지 만, 지금은 그것을 사용해서는 안된다는 것을 읽으며 즉시 설정되어야한다.

나를 올바른 방향으로 안내 할 수 있습니까? 감사!

+0

읽지 않은 곳으로 연결하면 안됩니까? 나는 그 문제를 보지 못했다. 비동기를 사용해야하는 방법입니다. 함수의 실행이 끝나면 콜백합니다. 후속 함수는 콜백이 호출 될 때까지 실행되지 않습니다. –

+0

찾을 수 있으면 좋겠다. 나는 그것을 오래 전에 읽었다. 나는 콜백을 호출해야한다는 것을 알고 있지만 콜백 비동기 호출을하기 위해 언급 한 함수 중 하나에 싸여 있어야한다고 생각한다. 우리에게는 몇 가지 이상한 점이 있습니다. 그것이 이것 또는 다른 것에서 인 경우에 확실하지 않으나, 나는 문제일지도 모른 무엇이든을 제거 할 것이라고 생각했다. – Christie

+0

나는 "잘못된 방향"이라고 생각하지 않는다. 문제는 뭔가 다른 것이어야한다. 콜백의 첫번째 인자는 에러가 없다면 null이어야하고 그렇지 않으면'.series' 호출은 오류. 'console.trace()', 중단 점 및 더 많은 출력으로 디버깅 해보십시오. – Gntem

답변

6

필자가 잠시 후에 읽었던 참고 문헌이 마침내 발견되었습니다.

그것은이 페이지에 : http://caolanmcmahon.com/posts/nodejs_style_and_structure/

그는 규칙 # 3과 페이지의 첫 번째 코멘트에 응답 내 문제에 더 직접적인 상관 관계에있는 일반적인 경우에 대해 설명합니다.

비록 내가 임의 오류의 원인이 아니더라도, 나는 질문의 요점이었던 저자의 의도에 따라 모듈을 사용하고 싶습니다. 이 글에서

, 그는 process.nextTick를 사용하여 언급한다,하지만 난 정말 노드가이 경우에 그에서 멀리 이동하려고 생각하고 나는 말한다 한 달 전에에서 비동기 문제 스레드에 응답 발견

"함수가 비동기로 실행되는지 확인해야합니다. 비동기인지 여부를 모르는 경우 setImmediate를 사용하여 강제로 비동기로 설정할 수 있습니다."

그래서 대답은 제가 가겠습니다. 와. setImmediate에서 모든 동기화 콜백을 래핑하려고합니다.

+2

링크가 깨졌습니다. – Dodekeract