меня в качестве основной функции следующим образом:Повторные запросы GET петлей последовательно используя Q.js
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
}
Когда я console.log расположение values[0]
неисправна, когда он должен быть 0,1,2 .. ..... п. Как я могу это достичь? Большое спасибо!
Вам просто нужны результаты в порядке, когда все это делается? Если это так, запросы могут быть отправлены параллельно (гораздо быстрее, чем последовательные запросы) с небольшим кодом, чтобы убедиться, что результаты сохранены в порядке. Кроме того, ваш код не использует 'j'. Можете ли вы показать достаточно кода, чтобы мы поняли, почему цикл 'j' существует вообще, поскольку это имеет отношение к тому, как наилучшим образом решить проблему. – jfriend00
@ jfriend00 Я добавил больше контекста. Мне нужно, чтобы мои запросы GET возвращались в порядке, потому что каждая предыдущая итерация основывается на предыдущем, поэтому он не может быть случайным порядком. –
Просмотрите два варианта с помощью '.reduce()' в этом ответе: [Как синхронизировать последовательность обещаний?] (Http://stackoverflow.com/questions/29880715/how-to-synchronize-a-sequence-of -promises/29906506 # 29906506). – jfriend00