2016-07-30 23 views
0

Ich möchte eine Anfrage-Methode aufrufen, die den Körper von sich selbst als ein Array, das auch ein Element eines anderen Array ist. also sollte ich über dieses übergeordnete Array iterieren und seine Elemente an Request-Methode für eine neue Anfrage an den Server übergeben. Ich habe bodies.forEach verwendet, aber das machen die Anrufe async und ich sollte auch etwas nach jeder Antwort tun und sync Anrufe benötigen. Was ist der beste Weg, dies zu tun?Wie kann ich über ein Array iterieren und Elemente an eine Methode übergeben, sollten auch alle Methoden synchron laufen?

bodies = [ [['name', 'Saeid'], ['age','23']], 
 
      [['name', 'Saeid'], ['age', 23 ], ['city', 'Tehran']] 
 
      ] 
 
bodies.forEach(function(body){ 
 
    request(body, function(res){ 
 
    //do something with this response and if meet oure desired condition continue... 
 
    )}; 
 
});

+0

, die nicht gültig Javascript zurückzukehren, ist es? –

+0

Dies ist NodeJS als Server-Seite Javascript – SAlidadi

+0

Entschuldigung seine coffeescript, lassen Sie es bearbeiten – SAlidadi

Antwort

1

Sie Array.prototype.slice() nutzen könnten, Array.prototype.shift() Ergebnisse in der angegebenen Reihenfolge Array entsprechend Eingangs

bodies = [ [['name', 'Saeid'], ['age','23']], 
      [['name', 'Saeid'], ['age', 23 ], ['city', 'Tehran']] 
      ]; 

var copy = bodies.slice(0); 
var results = []; 

function queue(arr) { 
    let curr = arr.shift(); 
    request(curr, (res) => { 
    // do stuff with `res` 
    // results.push(res); 
    if (arr.length /* && if meet oure desired condition continue... */) { 
     queue(arr) 
    } 
    }) 
} 

queue(copy); 
+0

Seine weiß nicht wie um es zu implementieren, finde ich nur, dass diese Lösung rekursiv ist und Versprechungen verwendet :) – SAlidadi

+0

@SAlidadi _ "Es weiß nicht, wie man es implementiert" _ Haben Sie Muster bei Antwort versucht? _ "Ich finde nur, dass diese Lösung rekursiv ist und Versprechungen verwendet :)" _ Ja, Ansatz verwendet Rekursion und 'Versprechen'; obwohl "Promise" Teil kann entfernt werden und sollte das gleiche Ergebnis – guest271314

+0

@SAlidadi Siehe aktualisierten Beitrag; entfernte "Promise" -Portionen. Sie können '&&' bei 'if' Bedingung entweder mit dem nächsten Element innerhalb Array oder stoppen rekursiven Aufruf zu Funktion – guest271314