Простой пример узла 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) ->
Другие вопросы по тегам