Простой пример узла Q Promises
Я пытаюсь обернуть голову вокруг библиотеки Q / обещаний в целом, чтобы я мог реализовать ее в своем приложении узла, но у меня возникают проблемы с поиском чего-то краткого и достаточно конкретного, чтобы быстро начать работу.
Может ли кто-нибудь помочь мне перевести этот код в асинхронный шаблон, используя библиотеку обещаний Q?
// # 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 ответ
Решение
Таким образом, вы хотите вернуть 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
методы
db.connect()
.then(msg) ->
.fail(e) ->