Spec-Zone.ru › Bluebird

.asCallback

.asCallback(
    [function(any error, any value) callback],
    [Object {spread: boolean=false} options]
) -> this
.nodeify(
    [function(any error, any value) callback],
    [Object {spread: boolean=false} options]
) -> this

Регистрирует обратный вызов в стиле Node.js для этой промисы. Когда эта промиса выполняется или отклоняется, обратный вызов Node.js будет вызван с аргументом причины ошибки и аргументом успешного значения. Аргумент ошибки будет null в случае успеха.

Возвращает эту промису вместо создания новой. Если аргумент callback не является функцией, этот метод ничего не делает.

Это можно использовать для создания API, которые принимают как обратные вызовы в стиле Node.js, так и возвращают промисы:

function getDataFor(input, callback) {
    return dataFromDataBase(input).asCallback(callback);
}

Вышеприведённая функция может сделать всех счастливыми.

Промисы:

getDataFor("me").then(function(dataForMe) {
    console.log(dataForMe);
});

Обычные обратные вызовы:

getDataFor("me", function(err, dataForMe) {
    if( err ) {
        console.error( err );
    }
    console.log(dataForMe);
});

Промисы могут быть отклонены ложными значениями (или вообще без значения, что эквивалентно отклонению с undefined), однако .asCallback вызовет обратный вызов с объектом Error , если причина отклонения промисы — ложное значение. Вы можете получить исходное ложное значение из свойства .cause ошибки.

Пример:

Promise.reject(null).asCallback(function(err, result) {
    // If is executed
    if (err) {
        // Logs 'null'
        console.log(err.cause);
    }
});

Нет никакого влияния на производительность, если пользователь фактически не передаёт функцию обратного вызова в стиле Node.js.

Option: spread

Некоторые nodeback ожидают более 1 успешного значения, но для этого нет сопоставления в мире промис. Вы можете указать опцию spread для вызова nodeback с несколькими значениями, когда значение выполнения является массивом:

Promise.resolve([1,2,3]).asCallback(function(err, result) {
    // err == null
    // result is the array [1,2,3]
});

Promise.resolve([1,2,3]).asCallback(function(err, a, b, c) {
    // err == null
    // a == 1
    // b == 2
    // c == 3
}, {spread: true});

Promise.resolve(123).asCallback(function(err, a, b, c) {
    // err == null
    // a == 123
    // b == undefined
    // c == undefined
}, {spread: true});

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

Spec-Zone.ru

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