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