2016-04-09 5 views
-1

Я новичок в обещаниях. Я не уверен, как написать этот код в обещаниях bluebird. Может кто-нибудь объяснить, как это должно выглядеть с обещаниями?Вызов функции Bluebird Promise в цикле

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

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

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

Спасибо за все

+0

Вы пытаетесь запустить запросы параллельно и собрать все результаты, чтобы в конце или вы пытаетесь запустить их по одному время один за другим? Какова ваша цель? – jfriend00

+0

Когда мы просим вас уточнять вопросы, вы должны ответить. Когда вы оставляете важные детали неясными, единственными возможными ответами являются догадки. Пожалуйста, ответьте, когда люди зададут вам вопросы. – jfriend00

+0

Моя цель - сохранить данные со всех сайтов на переменные. – Patchwerk

ответ

0

Если вы просто хотите, чтобы собрать результаты 10 запросов, которые не зависят от друг друга, тогда вы можете запустить их все параллельно и дать обещания собрать результаты для вас. Поскольку вы упомянули Bluebird, вы можете позволить Bluebird сделать promisified версии методов 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 
}); 
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

+0

Спасибо, это работает. Так что, если я получу его, Promise.map - это цикл обещаний для функции? Cheers – Patchwerk

+0

Promise.map очень похож на Promise.all (native и bluebird), однако Promise.map предоставляет дополнительные опции, в частности, параллелизм. Я продемонстрировал эту технику b/c, она специфична для синей птицы (Promise.all можно найти в native), но тоже b/c [«Обычное использование Promise.map заключается в замене шаблона .push + Promise.all»] (http://bluebirdjs.com/docs/api/promise.map.html) – scottjustin5000

Смежные вопросы