2013-08-25 1 views
0

요점을 살펴 보겠습니다. 나는 CS를 사랑한다. 나는 노드를 좋아한다. 신들이 제안한대로 콜백을 사용하는 것보다 더 낫다.콜백 (callback)에 관한 Coffescript 및 Nodejs 코딩 스타일

불행히도 나는 보통 약간 중첩 된 콜백에서 오류를 지속적으로 검사합니다.

다음은 동일한 샘플 작업을 수행하는 세 가지 스타일입니다. 들여 쓰기와 조건 지옥을 피하고 가독성을 희생하지 않기 위해 사용하는 것은 어느 것입니까?

약속, 비동기 또는 iced-cs를 사용하지 않는 경우 언제든지 새 것을 제안하십시오.

authenticate: (token, cb) => 
    @collection 'services', (err, collection) => 
    if err 
     cb err, undefined 
    else 
     collection.findOne token: token, (errFindingService, service) => 
     if err 
      cb errFindingService, undefined 
     else 
      cb undefined, service 

authenticate: (token, cb) => 
    @collection 'services', (err, collection) => 
    if not err 
     collection.findOne token: token, (errFindingService, service) => 
     if not errFindingService 
      cb undefined, service 
     else 
      cb errFindingService, undefined 
    else 
     cb err, undefined 

authenticate: (token, cb) => 
    @collection 'services', (err, collection) => 
    return cb err, undefined if err 
    collection.findOne token: token, (errFindingService, service) => 
     return cb errFindingService, undefined if err 
     cb undefined, service 

PS : 나는

https://github.com/polarmobile/coffeescript-style-guide이 사전에 모두 감사에 부합하는 if not err 대신 unless의를 사용하고 두 번째에.^_^

+0

[코드 검토 SE] (http://codereview.stackexchange.com/)에 더 적합 할 수 있습니다. 하지만, 가장 안쪽 콜백이'cb '를 호출하는 방법을 결정하는 것일뿐 아니라'collection.findOne token : token, cb'이 필요하지 않을 수도 있습니다. 그리고 개인적으로'async' 등을 재검토 할 것을 제안합니다 - https://gist.github.com/coiscir/2ab7751207d5af6b4e0b. –

+0

Woa 코드 리뷰가 존재했는지조차 알지 못했습니다.비동기 옵션은 물론 더 좋지만 언제나 옵션이 아닙니다. 나는이 순간을위한 최고의 스타일을 궁금해. :) –

답변

3

커피 스크립트에서 오류 처리를 위해 내가 선호하는 상용구는 return callback error if error입니다. 그래서

queryDb conditions, (error, results) -> 
    return callback error if error 
    console.log result for result in results 
  • 는 1 라이너 난 강력 오류가 항상 return
  • 와 논리 상단 및 단락 회로로 처리를 선호
  • 는이 같은 들여 쓰기에 성공 코드를 잎의 수준, 첫 번째는 nodejsfs MODU 예를 들면, 내부적으로 사용하는 것과 가까이있는 if/else
0

할 반대 르.

이 첫 번째 인수이므로 먼저 확인하는 것이 좋습니다. 일단 방해가되면, 콜백 스택에 더 깊이 들어가게됩니다.

첫 번째 및 세 번째 옵션은 명시 적 리턴을 제외하고는 동일한 JS로 컴파일됩니다.

중요한 부분을 읽고 식별하기가 더 쉬운가? 지금부터 두 달 후에 코드를 검토해보십시오.

파이썬 배경에서 볼 때 좀 더 간결한 형식이 더 명확하지 않다면 더 개방 된 구조 (예 : 첫 번째 구조)를 선호합니다. 그래서 저는 Coffeescript의 독해력을 좋아하지만, 가능한 모든 것을 생략하는 표현에 덜 매혹됩니다. {}(). 만약 내가 그만두고 정신적으로 그 사람들을 다시 추가해야한다면, 그 간결성은 너무 멀어졌습니다.

0

가이 같은 것을 볼 수 있습니다 flat-flow 사용 :

그것은 여전히 ​​(또는 조건문없이) 긴 호출 체인에 깨끗
{ flow } = require 'flat-flow' 

authenticate: (token, done) -> 
    flow { getCollection: @collection }, [ 

    # Get collection. 
    (done) -> 
     @getCollection 'services', (err, collection) -> 
     done err, { collection } 

    # Get service 
    (done) -> 
     @collection.findOne { token }, (err, service) -> 
     done err, { service } 

    # # Get service (alternative) 
    # (done, { collection }) -> 
    # collection.findOne { token }, (err, service) -> 
    #  done err, { service } 

    ], (err, { service }) -> 
    done err, service 

    # You can use @service as well. 

.