Spec-Zone.ru › Bluebird

Promise.fromCallback

Promise.fromCallback(
    function(function callback) resolver,
    [Object {multiArgs: boolean=false} options]
) -> Promise
Promise.fromNode(
    function(function callback) resolver,
    [Object {multiArgs: boolean=false} options]
) -> Promise

Возвращает промис, который разрешается функцией обратного вызова в стиле node.js. Это наиболее подходящий способ для динамической промисификации, когда библиотеки не предоставляют классы для автоматической промисификации по умолчанию.

Функция-разрешитель получает обратный вызов, который должен вызываться в соответствии с соглашениями node.js «ошибка-сначала».

Установка multiArgs в true означает, что результирующий промис всегда выполнится со значением результата(ов) обратного вызова. Это необходимо, потому что промисы поддерживают только одно значение успеха, в то время как некоторые API обратных вызовов имеют несколько значений успеха. По умолчанию игнорируются все, кроме первого значения успеха функции обратного вызова.

Использование ручного разрешителя:

var Promise = require("bluebird");
// "email-templates" doesn't expose prototypes for promisification
var emailTemplates = Promise.promisify(require('email-templates'));
var templatesDir = path.join(__dirname, 'templates');


emailTemplates(templatesDir).then(function(template) {
    return Promise.fromCallback(function(callback) {
        return template("newsletter", callback);
    }, {multiArgs: true}).spread(function(html, text) {
        console.log(html, text);
    });
});

То же самое можно записать более лаконично с помощью Function.prototype.bind:

var Promise = require("bluebird");
// "email-templates" doesn't expose prototypes for promisification
var emailTemplates = Promise.promisify(require('email-templates'));
var templatesDir = path.join(__dirname, 'templates');


emailTemplates(templatesDir).then(function(template) {
    return Promise.fromCallback(template.bind(null, "newsletter"), {multiArgs: true})
        .spread(function(html, text) {
            console.log(html, text);
        });
});

© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/promise.fromcallback.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API