承诺和不规则的callback

我使用蓝鸟玩弄一个承诺控制stream程。 Bluebird提供了一个用于将常规callback函数转换为promise函数的.promisify()方法,但是当函数不规则时,我不清楚该怎么做。 例如requestjs请求的方法签名是

request(url, callback) 

在哪里callback

 err, res, body 

而不是常规的

 err, res 

我应该如何将这个转换成承诺?

Promise.promisify()也可以使用这种callback。 当给出多个值时,它们只会在一个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); }); 

也可以像Esailija在评论中提到的那样将.spread()返回给单个参数:

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