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)
                )
        )
)
4

2 回答 2

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) // <<<================ 
于 2012-09-10T06:39:03.580 回答
1

我会使用诸如async之类的流控制,它可以让您拥有更简洁的代码和易于理解的异步流

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将返回

于 2012-09-10T06:39:45.350 回答