如何知道当前回调用于哪个电话?

时间:2016-03-29 08:09:59

标签: javascript jquery twitch

我有一个循环,对API进行了几次ajax调用。每次通话都会有回叫。 如果出现错误并且没有返回数据,则会发生问题,我无法知道哪个调用发生了该错误。

如何在回调函数中检测导致此错误的调​​用? 这是代码的一部分:

  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 + '===>'); 

现在,我不确定在API中调用chname的值是什么,以产生错误。 当没有错误时,我依赖从服务器返回的数据来知道回调是哪个调用的结果。当服务器返回错误时,我无法知道此回调适用于哪个调用。

1 个答案:

答案 0 :(得分:2)

正如@boaz建议的那样,使用闭包将保持每次调用的环境。 所以,代码看起来像:

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;}

现在使用上面的闭包,我们在循环中写下以下内容

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

获取完整示例http://codepen.io/TamerMarzouk/pen/VabQvP