Ich habe als Hauptfunktion wie folgt:Rückkehr geschleift GET-Anfragen unter Verwendung von Q.js sequentiell
function main(body) {
var deferred = Q.defer();
// Make an API request
console.log("body :"+ body);
var jsonbody = JSON.parse(body);
partialSequence = jsonbody['partialSequence'];
uniqID = jsonbody['uniq'];
resultLength = jsonbody['resultLength'];
console.log("resultLength :"+ resultLength);
if (partialSequence.indexOf("G") > -1) ns.push("G");
if (partialSequence.indexOf("A") > -1) ns.push("A");
if (partialSequence.indexOf("C") > -1) ns.push("C");
if (partialSequence.indexOf("T") > -1) ns.push("T");
uniq = uniqID;
var sequence = Promise.resolve();
for (var i = 0; i < resultLength; i++) {
location = i;
for (var j = 0; j < nuclides.length; j++) {
n = nuclides[j]
var promise = getLocation(n, location, uniq);
promise.then(function(values) {
console.log("location :"+values[0] + " "+ values[1]);
if (expressed) {
isExpressed = true;
if(route > 0) {
for (var key in resultSeq) {
if (resultSeq.hasOwnProperty(key)) {
var temp = resultSeq[key]
delete resultSeq[key];
temp = temp.concat(n);
resultSeq[temp] = temp;
}
}
} else {
resultSeq[n] = n;
}
}
});
}
if (isExpressed) route++; //used to check if we append to existing sequences.
}
deferred.resolve();
return deferred.promise
}
function getLocation(n, location, uniq) {
var expressed
var deferred = Q.defer();
Q.ninvoke(request, 'get', {
url: "https://myapi.com/location?"+"location="+location+"&"+"nucleotide="+n+"&"+"uniq= "+uniq
}).spread(function(response, body) {
expressed=1;
var jsonbody = JSON.parse(body);
return [jsonbody["expressed"], location];
});
return deferred.promise
}
Als ich den Standort console.log values[0]
nicht in Ordnung ist, wenn es 0,1,2 sein sollte .. ..... n. Wie kann ich das erreichen? Danke vielmals!
Brauchen Sie nur die Ergebnisse in der Reihenfolge, wenn sie alle fertig sind? Wenn dies der Fall ist, können die Anfragen parallel (viel schneller als sequenzielle Anfragen) mit ein wenig Code gesendet werden, um sicherzustellen, dass die Ergebnisse in Ordnung bleiben. Außerdem verwendet Ihr Code kein 'j'. Können Sie bitte genügend Code zeigen, damit wir verstehen, warum die "j" -Schleife überhaupt vorhanden ist, da dies relevant ist, um das Problem am besten zu lösen. – jfriend00
@ jfriend00 Ich habe mehr Kontext hinzugefügt. Ich brauche meine GET-Anfragen, um in der Reihenfolge zurückzukommen, weil jede vorherige Iterationen auf der vorherigen aufbaut, so dass es keine zufällige Reihenfolge sein kann. –
Sehen Sie sich die zwei Optionen mit '.reduce()' in dieser Antwort an: [Wie man eine Sequenz von Versprechen synchronisiert?] (Http://stackoverflow.com/questions/29880715/how-to-synchronize-a-sequence-of -Promises/29906506 # 29906506). – jfriend00