【问题标题】:how to return a value for a function in coffee-script如何在咖啡脚本中返回一个函数的值
【发布时间】:2012-09-03 00:03:09
【问题描述】:

我用coffee-script写node.js,效果很好,我想知道如何在coffee-script中为函数返回值,这是我的代码 p>

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

【问题讨论】:

    标签: node.js mongodb coffeescript


    【解决方案1】:

    由于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) // <<<================ 
    

    【讨论】:

    • 巧,如何在其他模块中使用该方法? db=require('./db'); items=db.find(???)
    • @Veelian 就像在示例代码中使用 db.open 一样。 db.find (err, items) -&gt; doSomething(items)
    【解决方案2】:

    我会使用流控制,例如 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

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 2013-10-28
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多