javascript - 在 for 循环中设置一个标志,以便在同一循环内调用的函数的回调函数中使用

标签 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 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();
  }
}

最佳答案

由于 .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();
  }
}

this 指针之后传递给 .bind() 的参数将被添加到原本会发送到回调的参数之前。因此,本质上 .execute() 将使用一个参数调用您的 .bind() 包装器,然后 .bind() 包装器将插入在调用实际回调之前您的参数。只要您声明回调参数并了解其工作原理,您就会得到您想要的结果。

关于javascript - 在 for 循环中设置一个标志,以便在同一循环内调用的函数的回调函数中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828537/

相关文章:

java - 我无法增加 For 中的 Studentid 值

java - 使用数组 io java 结果错误

Javascript:在更改之前保留变量值

android - 从 SearchManager Activity 获取结果到 android 中的主要 Activity

javascript - 从回调中获取值(value)

javascript - 如何从数据表内的链接调用 Vue.js 方法?

javascript - 将带有事件委托(delegate)的事件监听器附加到 Jupyter 笔记本?

javascript - 我可以将回调函数作为变量异步传递多个级别吗?

javascript - 为什么 window.innerWidth 没有返回正确的值?

javascript - Paperjs metaballs 不工作/显示