2016-03-29 4 views
0

Ich habe eine Schleife, die mehrere Ajax Aufrufe an eine API macht. Für jeden Anruf würde ein Rückruf erfolgen. Das Problem tritt auf, wenn ein Fehler auftritt und keine Daten zurückgegeben werden. Ich kann nicht feststellen, welcher Anruf diesen Fehler verursacht hat.Woher weiß man, für welchen Call der aktuelle Callback ist?

Wie erkenne ich den Anruf, der diesen Fehler innerhalb der Callback-Funktion verursacht hat? hier ist Teil des Codes:

for (var i = 0; i < channels.length; i++) { 

if ($.inArray(channels[i], livenow) > -1) { 

    continue; 
} 
this.chname = channels[i]; //this is the channel name 
Twitch.api({ 
    method: 'channels/' + this.chname 
}, function(error, list) { 
//insdie this callback 
//chname may have been changed when we received the callback 
    console.log(this.chname + '===>'); 

jetzt, ich bin nicht sicher, welcher Wert von ChName in der API aufgerufen wurde, um den Fehler zu machen. Wenn es keine Fehler gibt, bin ich auf die Daten angewiesen, die vom Server zurückgegeben werden, um zu wissen, dass der Callback ein Ergebnis davon war, welcher Aufruf. Wenn der Server einen Fehler zurückgibt, kann ich nicht wissen, für welchen Call dieser Callback ist.

+1

Können Sie die API zeigen schreiben Anrufe - wir können nicht wirklich helfen, ohne Code zu sehen –

+0

Der Rückruf wird auch auf das ursprüngliche Anfrageobjekt ausgesetzt. Sie können das verwenden, um die Details der Anfrage zu erhalten. – Boaz

+0

Ich mache einen Anruf in einer Schleife und bis ich den Rückruf erhalte, bin ich nicht sicher, welcher Anruf den Fehler verursachte – Tamer

Antwort

1

wie @boaz vorgeschlagen, mit der Schließung würde die Umgebung für jeden Anruf halten. So würde der Code wie folgt aussehen:

function mycall(chname) { 

function twitchcall() { 

Twitch.api({ 
    method: 'channels/' + chname 
}, function(error, list) { 
//callback code would be able to access chname when the twitch call was made 
}); 
}; 
return twitchcall;} 

jetzt über den Verschluss zu verwenden, wir folgende innerhalb der Schleife

//now to use it inside the loop 
calls[i] = mycall(xchname); 
calls[i](); 

für ein volles Beispiel http://codepen.io/TamerMarzouk/pen/VabQvP