简单的Q承诺节点的例子

我试图把我的头围绕Q库/承诺一般,所以我可以在我的节点应用程序中实现它,但我很难find一些简洁和具体,足以快速入门。

有人可以帮助我把这个代码翻译成一个使用Q的承诺库的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 

一旦我看到直接适用的东西,我认为将我的应用程序的其余部分转换为这种模式会容易得多。

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

 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方法时,你会得到一个promise对象,你可以绑定到.fail.fail方法

 db.connect() .then(msg) -> .fail(e) ->