承诺和不规则的回调

时间:2013-10-13 09:26:01

标签: javascript node.js control-flow bluebird

我正在玩一个使用bluebird的承诺控制流程。 Bluebird提供了一个.promisify()方法,用于将常规回调函数转换为promise函数,但我不清楚当函数不规则时我应该做什么。例如,requestjs请求的方法签名是

request(url, callback)

回调是

err, res, body

而不是常规的

err, res

我应该如何将此转换为承诺?

1 个答案:

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