在循环中调用Bluebird Promise函数

时间:2016-04-09 21:44:44

标签: javascript node.js bluebird

我是承诺中的新人。我不知道如何在bluebird承诺中编写此代码。有人可以解释这应该如何看待承诺吗?

for (var i = 10; i >= 0; i--) {

        var path = '127.0.0.1/getdata/' + i;

        http.get({
            path: path,
        }, (res) => {
          var data = res.resume();
        });
}

感谢您的一切

2 个答案:

答案 0 :(得分:0)

function makeRequest() {
    var items = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
    return Promise.map(items, function(item) {
        console.log(item);
        return get('/echo/html/');
    });
}
makeRequest().then(function(results) {
    console.log(results);
});

fiddle

这种方法正在使用Bluebird的Promise.map

答案 1 :(得分:0)

如果您只想收集10个不相互依赖的请求的结果,那么您可以并行启动它们,让承诺为您收集结果。既然你提到了Bluebird,你可以让Bluebird制作http方法的默认版本:

var Promise = require('bluebird');
var request = Promise.promisifyAll(require('request'), {multiArgs: true});

var promises = [];
for (var i = 10; i >= 0; i--) {
    var path = '127.0.0.1/getdata/' + i;
    promises.push(request.getAsync(path).spread(function(response, body) {
        return body;
    }));
}
Promise.all(promises).then(function(results) {
    // array of results here
}, function(err) {
    // error here
});