9

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

request(url, callback)

回调在哪里

err, res, body

而不是常规的

err, res

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

4

1 回答 1

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);
});
于 2013-10-13T09:45:50.513 回答