承诺和不规则的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); });