2013-10-13 12 views
9

約束のコントロールフローで、bluebirdを使って遊んでいます。 Bluebirdは、通常のコールバック関数を約束関数に変換するための.promisify()メソッドを提供していますが、関数が不規則なときに何をすべきかは不明です。例えばrequestjs要求のためのメソッドシグネチャは、コールバックではなく、私は約束にこれを変換する必要がありますどのように定期的に約束と不規則なコールバック

err, res 

err, res, body 

ある

request(url, callback) 

のですか?

答えて

14

Promise.promisify()でもこのようなコールバックを使用できます。複数の値が与えられたとき、彼らはただArrayで渡されます:

Esailijaはコメントで述べたようにも戻って個々の引数に .spread()することができ
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); 
}); 

// ... 

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

をあなたもする必要があります[] .spread(function(response、body){}) '](https://github.com/petkaantonov/bluebird/blob/master/API.md#spreadfunction-fulfilledhandler--function-rejectedhandler-- - .promise)の代わりに '.then' – Esailija

関連する問題