我正在使用bluebird玩一个承诺控制流。Bluebird 提供了一个 .promisify() 方法,用于将常规回调函数转换为 promise 函数,但我不清楚当函数不规则时我应该做什么。例如requestjs请求的方法签名是
request(url, callback)
回调在哪里
err, res, body
而不是常规的
err, res
我应该如何将其转换为承诺?
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);
});