Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中设置要在同一循环中调用的函数的回调函数中使用的标志_Javascript_For Loop_Callback - Fatal编程技术网

Javascript 在for循环中设置要在同一循环中调用的函数的回调函数中使用的标志

Javascript 在for循环中设置要在同一循环中调用的函数的回调函数中使用的标志,javascript,for-loop,callback,Javascript,For Loop,Callback,我试图在下面的循环中识别最后一个回调函数调用。当前,循环的执行速度比内部函数快,并且在最后一次回调之前,标志被设置为true。我需要的是仅在最后一次回调期间将标志设置为true。如何修改以下代码: // global variable flag var flag = false; var files = [..]; // some array of files var count = files.length; for (i = 0; i < count; i++) { var fi

我试图在下面的循环中识别最后一个回调函数调用。当前,循环的执行速度比内部函数快,并且在最后一次回调之前,标志被设置为true。我需要的是仅在最后一次回调期间将标志设置为true。如何修改以下代码:

// global variable flag
var flag = false;
var files = [..]; // some array of files
var count = files.length;

for (i = 0; i < count; i++) {
  var file = files[i];
  flag = count - i == 1; // Sets true when last item is processed in the files array 
  request = some-api.get(file.id);
  request.execute(callback.bind(this));
}

function callback(data){
  if(flag){
    // Do something with data
    data.use();
  }
}
//全局变量标志
var标志=假;
变量文件=[…];//一些文件数组
var count=files.length;
对于(i=0;i
因为
.execute()
是异步的,所以无法使用全局标志与回调通信,因为您不知道何时调用回调,并且无法为回调的一次调用指定一个全局标志值,也无法为回调的另一次调用指定另一个全局标志值

相反,您可以使用
.bind()
功能将该标志传递给回调函数,以向函数添加参数。可以这样做:

// global variable flag
var files = [..]; // some array of files

for (i = 0; i < files.length; i++) {
  var flag = (i >= files.length - 1); // true when we are on last item
  some-api.get(files[i].id).execute(callback.bind(this, flag));
}

function callback(flag, data){
  if(flag){
    // Do something with data
    data.use();
  }
}
//全局变量标志
变量文件=[…];//一些文件数组
对于(i=0;i=files.length-1);//在处理最后一项时为true
一些api.get(files[i].id).execute(callback.bind(this,flag));
}
函数回调(标志、数据){
国际单项体育联合会(旗){
//处理数据
data.use();
}
}
这个
指针之后传递给
.bind()
的参数将被添加到将发送到回调的参数前面。因此本质上,
.execute()
将使用一个参数调用
.bind()
包装,然后
.bind()
包装将在调用实际回调之前插入您的参数。只要您声明回调参数并了解其工作原理,您就会得到您想要的。

.execute()
异步的吗?如果是这样,您应该将该标志传递给回调,而不是尝试在全局变量中使用它
.bind()
将允许您传递超出
.execute()
通常发送给它的额外参数。
.execute()
是异步的。这就是问题的根源。这不是我的代码,而是我正在使用的API。因此,我认为无法将该标志传递给回调方法。还有其他想法吗?
.bind()
可以帮你解决这个问题。我已经在下面的回答中说明了如何。