2012-09-10 2 views
0

coffee 스크립트를 사용하여 node.js를 작성했습니다. 잘 알고 싶은 것은 커피 스크립트의 함수 값을 반환하는 방법입니다. 여기 DB 관련 작업이 모든 비동기이기 때문에, 당신은 find 루틴에 대한 콜백 함수를 지정해야 내 코드커피 스크립트에서 함수의 값을 반환하는 방법

exports.find=-> 
    db.open((err, db)-> 
     unless err 
      db.createCollection('test', (err, collection)-> 
       unless err 
        collection.find().toArray((err, items)-> 
         unless err 
          //here how to return *items* 
          console.log(items) 
       ) 
     ) 
) 

답변

2

입니다.

((!) 참고 :..

가 가

당신이 return if err 대신 unless err 같은 가드 절을 사용해야합니다 그것은 들여 쓰기 수준을 감소시키고 코드를 읽기 쉽게 만드는 더 나은 아직

또는, 당신은에 오류를 통과해야 첫 번째 매개 변수로 콜백. 이것은 당신이 청소기 코드와 underst 쉽게를 가질 수 있도록 async 같은 흐름 제어를 사용합니다

exports.find = (callback) -> 
    db.open (err, db) -> 
    return callback(err) if err 
    db.createCollection 'test', (err, collection) -> 
     return callback(err) if err 
     collection.find().toArray (err, items) -> 
     return callback(err) if err 
     callback(null, items) // <<<================ 
+0

는 치아 오, 어떻게 다른 모듈에서이 방법을 사용하려면 반환됩니다? 'db = require ('./ db'); items = db.find (???)' – Mil0R3

+0

@Veelian 예제 코드에서'db.open'을 사용하는 방법처럼. 'db.find (err, items) -> doSomething (items)' – qiao

1

Node.js를 프로젝트의 규칙)입니다 null 에러가 반환 될 때 발생 비동기이 경우

npm install async 

async = require "async" 

exports.find = (callback) -> 
    async.waterfall [ 
    (callback) -> 
     db.open (err, db) -> callback err, db 

    (db, callback) -> 
     db.createCollection 'test', (err, collection) -> callback err, collection 

    (collection, callback) -> 
     collection.find().toArray (err, items) -> callback err, items 
    ], (err, items) -> 
    if err then callback null else callback items 

흐른다. 오류가없는 경우

, items

관련 문제