.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