2016-07-21 6 views
0

Ich habe einen RSMQ-Server, der überprüfen sollte, ob bestimmte URLs ein Bild enthalten. Ich muss das Programm synchron laufen lassen, da es eine init() Funktion und eine while(true) Schleife gibt, um alle Anfragen zu bedienen.Wie async.waterfall mit externen asynchronen Funktionen zu verwenden ist (RedisSMQ)

Zuerst, die Schleife wird vor der init() Funktion aufgerufen.

Sekunde, ich möchte, dass die Schleife wartet, bis jede Iteration abgeschlossen ist, bevor die Schleife fortgesetzt wird, sodass kein Heap-Überlauf verursacht wird.

Der Versuch, async.waterfall zu verwenden. Mein Code: Pastebin.com link

Vielen Dank im Voraus!

Antwort

0

Dies ist eine sehr schlechte Praxis, while (true) zu verwenden, weil es blockiert und eine große Menge von Anfragen anstelle von eins emittiert, wie Sie es erwartet haben. Verwenden Sie async.during:

async.whaterfall([ 
    (done) => { 
     // do some async stuff 
     done(null, false); 
    }, 
    (isLoaded, callback) => { // isLoaded is false 
     async.during(
      () => ! isLoaded, // Test async function result 
      (done) => { // Run check 
       checkIsLoaded((err) => { 
        if (err) { 
         done(err); 
        } else { 
         isLoaded = true; 
        } 
       }) 
      }, 
      callback 
     ) 
    } 
], (err, result) => { 
    // result got... 
); 
+0

Ehrlich gesagt habe ich es nicht ganz verstanden, können Sie bitte erarbeiten? Vielleicht benutze mein gegebenes Beispiel –

Verwandte Themen