2016-04-09 6 views
-1

Ich bin neu in Versprechen. Ich bin nicht sicher, wie man diesen Code in bluebird Versprechungen schreibt. Kann jemand erklären, wie das mit Versprechungen aussehen soll?Call Bluebird Promise-Funktion in Schleife

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

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

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

Danke für alles

+0

Sind Sie die Anforderungen parallel zu laufen versuchen, und alle Ergebnisse, um am Ende zu sammeln oder versuchen Sie, sie einzeln zu laufen eine Zeit nach der anderen? Was ist dein Ziel? – jfriend00

+0

Wenn wir Sie bitten, Fragen zu klären, sollten Sie antworten. Wenn Sie wichtige Details unklar lassen, sind die einzigen Antworten, die möglich sind, Vermutungen. Bitte beantworten Sie, wenn Leute Ihnen Fragen stellen. – jfriend00

+0

Mein Ziel ist es, Daten von allen Webseiten zu Variablen zu speichern. – Patchwerk

Antwort

0

Wenn Sie nur sammeln wollen, um die Ergebnisse von 10 Anfragen, die auf nicht abhängen Dann kannst du sie alle parallel starten und die Versprechen für dich sammeln lassen. Da Sie Drossel erwähnt, können Sie lassen Drossel promisified Versionen der HTTP-Methoden machen:

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

Dieser Ansatz Bluebird verwendet Promise.map

+0

Danke, das funktioniert. Also, wenn ich es bekomme, ist Promise.map Versprechen Schleife für die Funktion? Cheers – Patchwerk

+0

Promise.map ist Promise.all (native und Bluebirds) sehr ähnlich, Promise.map bietet jedoch zusätzliche Optionen, insbesondere Parallelität. Ich demonstrierte diese Technik b/c ist spezifisch für Bluebird (Promise.all kann in nativ gefunden werden), aber auch b/c ["Eine häufige Verwendung von Promise.map ist das Ersetzen der .push + Promise.all-Boilerplate"] (http://bluebirdjs.com/docs/api/promise.map.html) – scottjustin5000