2013-07-23 2 views
0

저는 coffeescript를 배우고 node.js와 함께 사용하여 express.js에 기본 나머지 API를 작성합니다.Coffeescript + Node.js : 콜백 대안

내 코드가 콜백의 여러 계층으로 덮히는 것을 알기 시작했습니다. 일부 인터넷 검색은 약속, 선물 및 발전기와 같은 몇 가지 대안이 있음을 보여 줬습니다.

  1. 이 용어는 처음입니다. 평범한 용어로 이것들을 설명해 주시겠습니까?
  2. 이들 중 어떤 것도 Coffeescript에서 사용할 수 있습니까? 그렇다면, 나는 그것을 배울 수있는 약간의 자원에 크게 감사 할 것입니다.
  3. 그들 사이에 환경 설정이 있습니까? async.js (https://github.com/caolan/async) 그것은 새로운 개념을 도입,하지만 당신은 더 관리하고 읽을 무언가로 콜백 수프를 간소화 할 수 없습니다에서
+1

1. 구글이 이러한 유형의 잘 작동에 매우 철저한 대답에서이 쿨 - 에이드 http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript 문제. 2. 예. 모든 자바 스크립트 구문은 coffeescript에서 사용할 수 있습니다. 3. 여기에는 몇 개의 캠프가 있지만 노드 순 진자는 일반 오래된 콜백을 사용합니다. –

답변

0

봐.

foo(data, (err, result) -> 
    bar(result, (err, omgimtired) -> 
     foobar(omgimtired, (err....) -> 
      ... 
     ) 
    ) 
) 

예를 들어 대신

당신은 async.waterfall를 사용하고 다른 후 하나를 호출 할 그것을 함수의 목록을 공급할 수 있습니다.

약속은 매우 간단합니다 (주위에 마음을 감싸는 경우). 그들은 특정 작업의 결과 인 객체를 설명합니다. 결과를 나타내는 모든 함수에서 객체를 반환한다고 가정 해보십시오. 이제는 모든 결과에 '성공'완료를위한 콜백과 성공하지 못한 콜백이 전달되는 함수 (then(...))가 있다고 상상해보십시오. 진정해? 약속을 특별하게 만드는 유일한 방법은이 콜백이 또 다른 약속을 반환 할 수 있다는 것입니다.이 약속은 이행해야하는 "봉쇄"약속에 대해 먼저 충족되어야합니다. 등등. 콜백 시퀀스를 .then(...) 호출 체인으로 대체하면됩니다.

Parse.User.logIn("user", "pass", { 
    success: function(user) { 
    query.find({ 
     success: function(results) { 
     results[0].save({ key: value }, { 
      success: function(result) { 
      // the object was saved. 
      } 
     }); 
     } 
    }); 
    } 
}); 

Parse.User.logIn("user", "pass").then(function(user) { 
    return query.find(); 
}).then(function(results) { 
    return results[0].save({ key: value }); 
}).then(function(result) { 
    // the object was saved. 
}); 

http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/에서 음료 대 유사한 주제 What are the differences between Deferred, Promise and Future in JavaScript?