Spec-Zone.ru › Bluebird

Promise.promisify

Promise.promisify(
    function(any arguments..., function callback) nodeFunction,
    [Object {
        multiArgs: boolean=false,
        context: any=this
    } options]
) -> function

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

Если nodeFunction вызывает свой обратный вызов с несколькими значениями успеха, значение исполнения будет первым элементом исполнения.

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

Если вы передадите context, nodeFunction будет вызван как метод на context.

Пример промосификации асинхронной readFile модуля node.js fs:

var readFile = Promise.promisify(require("fs").readFile);

readFile("myfile.js", "utf8").then(function(contents) {
    return eval(contents);
}).then(function(result) {
    console.log("The result of evaluating myfile.js", result);
}).catch(SyntaxError, function(e) {
    console.log("File had syntax error", e);
//Catch any other error
}).catch(function(e) {
    console.log("Error reading file", e);
});

Обратите внимание, что если функция узла является методом некоторого объекта, вы можете передать объект в качестве второго аргумента, как показано ниже:

var redisGet = Promise.promisify(redisClient.get, {context: redisClient});
redisGet('foo').then(function() {
    //...
});

Но это также сработает:

var getAsync = Promise.promisify(redisClient.get);
getAsync.call(redisClient, 'foo').then(function() {
    //...
});

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

Spec-Zone.ru

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