简单Q承诺节点示例

时间:2013-07-05 22:04:09

标签: javascript node.js coffeescript promise q

我正试图总结我的Q库/承诺,所以我可以在我的节点应用程序中实现它,但我很难找到简洁和具体的东西来快速入门。

有人可以帮助我使用Q的promise库将此代码转换为asycronous模式吗?

// # For those new to coffeescript

// # '(params) ->' === 'function (params) {}' in coffeescript
// # '@' === 'this' in coffeescript


// # NPM
Q = require 'q'

// # Database class
module.exports = class Database

  constructor: () -> 
    // # mongoose
    @mongoose = require('mongoose')  

    // # Make database connection
    @connect_database()

  connect_database: () ->
    try
      @mongoose.connect('mongodb://127.0.0.1:27017/database')
      return 'Database connected'.green
    catch e
      return ('Database connection error: ' + e.toString()).red

一旦我看到直接适用的内容,我认为将我的应用程序的其余部分转换为此模式会更容易。

1 个答案:

答案 0 :(得分:3)

所以基本上你想要返回dfd.promise,然后在连接到数据库后解析或拒绝它。

Q = require 'q'

connect: () ->
 # Create deferred object
 dfd = Q.defer()

 # Attempt to connect
 try
  @mongoose.connect(...)
  # Resolve deferred object
  dfd.resolve('Database connected')

 catch e
  # Reject deferred with error object
  dfd.reject(e)

 # Return promise immediately
 dfd.promise

现在,当您运行connect方法时,您将获得一个可以绑定到.then.fail方法的promise对象

db.connect()
 .then(msg) ->
 .fail(e) ->
相关问题