2012-09-10 40 views
0

我用咖啡脚本编写node.js,它工作正常,我想知道的是如何在咖啡脚本中返回一个函数的值 ,这里是我的代码如何在咖啡脚本中返回一个函数的值

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

由于DB相关的操作都是异步的,你应该指定find常规的回调函数。

(旁注:。

你应该使用保护条款像return if err,而不是unless err它减少缩进级别,使代码更容易阅读

或者更好的是,你应该通过错误的回调作为第一个参数,这是node.js的项目约定)

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

巧,如何在另一个模块中使用这种方法吗? '分贝=要求( './分贝'); items = db.find(???)' – Mil0R3

+0

@Veelian就像你在示例代码中使用'db.open'一样。 'db.find(err,items) - > doSomething(items)' – qiao

1

我会用流量控制等async这让你有更干净的代码和易于underst和异步流

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 

在这种情况下,发生错误时null将被退回。

如果没有错误,items将返回