我正在玩一个使用bluebird的承诺控制流程。 Bluebird提供了一个.promisify()方法,用于将常规回调函数转换为promise函数,但我不清楚当函数不规则时我应该做什么。例如,requestjs请求的方法签名是
request(url, callback)
回调是
err, res, body
而不是常规的
err, res
我应该如何将此转换为承诺?
答案 0 :(得分:14)
Promise.promisify()
也可以使用此类回调。当给出多个值时,它们只会在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);
});