2013-10-13 25 views
9

bluebird kullanarak, sözler denetim akışıyla oynuyorum. Bluebird normal bir geri çağırma işlevini bir vaat etme işlevine dönüştürmek için bir .promisify() yöntemi sağlar, ancak işlev düzensiz olduğunda ne yapmam gerektiği belirsiz. Geri arama yerineVaatler ve düzensiz geri aramalar

err, res, body 

olduğu Örneğin bir requestjs istek için yöntem imzası

request(url, callback) 

olduğu düzenli

err, res 

nasıl bir söz bu dönüştürme olmalıdır? Bu geri çağırmalarla da çalışabilir

cevap

14

Promise.promisify().

// ... 

request('http://stackoverflow.com').spread(function (response, body) { 
    console.log(response.statusCode); 
}); 
+5

Ayrıca olmalıdır: Esailija yorumlarda belirtildiği gibi

var Promise = require('bluebird'); var request = Promise.promisify(require('request')); request('http://stackoverflow.com').then(function (result) { var response = result[0]; var body = result[1]; console.log(response.statusCode); }); 

Hangi zamanda bireysel argümanları geri .spread() olabilir: Birden değerleri verilmiştir, bunlar sadece Array bir iletilmez olacağım ['.spread (function (response, body) {})'] özelliğini kullanabilir (https://github.com/petkaantonov/bluebird/blob/master/API.md#spreadfunction-fulfilledhandler--function-rejectedhandler-- - 'yerine'. – Esailija