Skip to content

Latest commit

 

History

History
49 lines (42 loc) · 1.9 KB

Q.md

File metadata and controls

49 lines (42 loc) · 1.9 KB

Q

Q — библиотека промисов, предоставляющая гораздо больше возможностей, чем нативная реализация Promise.

Список возможностей:

  • Отложенные значения (deferred, устаревший стиль): Q.defer
  • Поддержка множественных промисов: Q.all, Q.any, Q.spread
  • Создание, разрешение и отклонение промисов: Q(value), Q.when(value), Q.reject(value)
  • Преобразование свойств в промисы: Q.get, Q.set
  • Преобразование функций в промисы: Q.fcall, Q.invoke
  • Преобразование node-коллбэков в промисы: Q.nfcall, Q.ninvoke
  • Преобразование таймаутов: Q.timeout
  • Поддерживает интерфейс notify (уведомление о пргрессе длительной асинхронной операции)
  • Поддерживает цепной вызов и сквозной вызов (tapping)

Пример для Node.js приложения:

// Традиционная реализация
function authenticate (req, res, next) {
  User.findOne({ id: req.id }, function (err, user) {
    if (err) {
      return next('not found')
    }

    user.save(function (err, response) {
      // ...
    });
  });
}

// С помощью Q
function authenticate(req, res, next) {
  return Q(req.id)
    .then(function (id) {
       return Q.nfcall(User, 'findOne', id);
    })
    .then(function (user) {
       return Q.ninvoke(user, 'save');
    })
    .then(function (saved) {
       return res.send(201);
    })
    .catch(function (err) {
      return next(err);
    });
}