javascript - 无法计算 Javascript 循环

标签 javascript

for(var x = 19; x <= 29; x = x + 1) {
  if(x < 29) {
    if(values[x]) {
      var reader = new FileReader();
      var file = $(`#${keys[x]}`)[0].files[0];
      reader.readAsDataURL(file);
      reader.onloadend = function () {
        values[x] = reader.result.slice(reader.result.indexOf(',')+1);
      };
    }
  } else {
     insertAll();
  }
}

上面的代码仅返回最后一个文件并跳过所有其他文件,因为它需要时间才能完成,所以我如何确保循环不会在未完成读取文件的情况下继续

最佳答案

您可以使用递归代替循环,下面是一个示例:

function recursion(x){
  if(x < 29) {
    if(values[x]) {
      var reader = new FileReader();
      var file = $(`#${keys[x]}`)[0].files[0];
      reader.readAsDataURL(file);
      reader.onloadend = function () {
        values[x] = reader.result.slice(reader.result.indexOf(',')+1);
        recursion(++x)
      };
    }
  } else {
     insertAll();
  }
}
recursion(19)
// You get here only after all the files are read.

这个想法是只有在读完当前文件后才开始读取下一个文件(recursion(...)reader.onloadend 中调用> 回调)

关于javascript - 无法计算 Javascript 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803019/

相关文章:

javascript - 如何为略有不同的不同版本的网络应用程序构建代码?

javascript - 如何通过javascript将值传递到另一个静态页面?

javascript - .css 给我提供了有关我的部分的错误信息

javascript - Asset.fromModule 不是函数。 (在 'Asset.fromModule(image)' 中, 'Asset.fromModule' 未定义)

javascript - 将可观察日期与 knockout 和 jQuery 验证进行比较

javascript - 速记 Javascript 变量语法

javascript - Angular 4 - 循环遍历 Observables 并在新数组中提取值

javascript - StopPlay(); 的一个很酷的方法是什么?使用 JavaScript 的 <object id ="myflashvideo">?

c# - 动态窗口焦点MVC2

javascript - 在 AngularJS 中编辑表单时,如何使用 "map"模型值来选择框?