2013-10-13 14 views
9

Ich spiele mit einem Promises Kontrollfluss, mit bluebird. Bluebird bietet eine. Promisify() -Methode zum Konvertieren einer regulären Callback-Funktion in eine Versprechen-Funktion, aber ich bin unklar, was ich tun soll, wenn die Funktion unregelmäßig ist. Zum Beispiel für die Methodensignatur einer requestjs Anfrage istVersprechungen und irreguläre Rückrufe

request(url, callback) 

wo Rückruf

err, res, body 

statt der regulären

err, res 

Wie soll ich ein Versprechen seine Umwandlung ist das?

Antwort

14

Promise.promisify() kann auch mit solchen Rückrufen arbeiten. Wenn mehrere Werte angegeben, so werden sie nur entlang geführt werden in ein Array:

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); 
}); 

Welche auch .spread() zurück auf einzelne Argumente sein kann als Esailija in den Kommentaren erwähnt:

// ... 

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

sollten Sie auch kann ['.spread (function (response, body) {})'] verwenden (https://github.com/petkaantonov/bluebird/blob/master/API.md#spreadfunction-fulfulledhandler--function-rejectedhandler-- --promise) anstelle von ".then" – Esailija