Я пытаюсь понять, почему я вижу следующее:
Я запускаю несколько асинхронных запросов внутри цикла for, а затем просто распечатываю ответы. Вот очень упрощенная версия того, что я делаю:
function getStuff(){
var singers = ['marley','matthews','johnson','buffett'];
for(lastname in singers){
var lastName = singers[lastname];
log("Making request for "+ singers[lastname]);
makeAsyncRequest(singers[lastname], function(response){
//this is the callback when the async request returns
log("RESPONSE - "+lastName+": "+response);
});
}
}
Если я запускаю код синхронно (async: false), я каждый раз получаю следующие результаты, как и ожидалось:
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: jack
RESPONSE - matthews: dave
RESPONSE - buffett: jimmy
Когда я бегу асинхронно, я вижу результаты, подобные следующим. Я понимаю, что ответы могут вернуться не в порядке. Но я не понимаю, когда они выходят из строя, почему я вижу повторяющиеся значения? Например, я мог бы увидеть:
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: dave
RESPONSE - matthews: dave
RESPONSE - buffett: jimmy
Обратите внимание, что «Дейв», кажется, возвращается дважды? Я бы понял, если бы значения 'jack' и 'dave' были переключены, например так:
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: dave
RESPONSE - matthews: jack
RESPONSE - buffett: jimmy
Но я не понимаю, почему параметр "response" в обратном вызове, кажется, устанавливается в одно и то же значение дважды? Я пропускаю что-то простое здесь?
Спасибо за любую помощь!