如何知道当前回调是针对哪个调用的?
How to know which call the current callback is for?
我有一个循环,对 API 进行多次 ajax 调用。每次调用都会有回调。
当出现错误并且没有数据被 returned 时,问题就会发生,我无法知道是哪个调用导致了该错误。
如何在回调函数中检测导致此错误的调用?
这是代码的一部分:
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 值是什么导致了错误。
当没有错误时,我依靠从服务器输入的数据 return 来了解回调是哪个调用的结果。当服务器 return 出错时,我不知道这个回调是针对哪个调用的。
正如@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]();
我有一个循环,对 API 进行多次 ajax 调用。每次调用都会有回调。 当出现错误并且没有数据被 returned 时,问题就会发生,我无法知道是哪个调用导致了该错误。
如何在回调函数中检测导致此错误的调用? 这是代码的一部分:
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 值是什么导致了错误。 当没有错误时,我依靠从服务器输入的数据 return 来了解回调是哪个调用的结果。当服务器 return 出错时,我不知道这个回调是针对哪个调用的。
正如@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]();