Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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 如何使while循环真正异步_Javascript_Asynchronous_Localforage - Fatal编程技术网

Javascript 如何使while循环真正异步

Javascript 如何使while循环真正异步,javascript,asynchronous,localforage,Javascript,Asynchronous,Localforage,我正在从事一个javascript客户端项目,该项目执行一些繁重的计算,同时需要对用户友好。这当然意味着异步功能,但也允许用户在计算机执行繁重任务时做一些事情 将此作为异步UOS循环的一个示例: function async_operation(){ function do_stuff(){ var i=0; while(i<1000000000){ ... //do some stuff (to be more speci

我正在从事一个javascript客户端项目,该项目执行一些繁重的计算,同时需要对用户友好。这当然意味着异步功能,但也允许用户在计算机执行繁重任务时做一些事情

将此作为异步UOS循环的一个示例:

function async_operation(){

    function do_stuff(){
        var i=0;
        while(i<1000000000){
            ... //do some stuff (to be more specific: localforage.setItem)
            ++i;
        }
    }

    setTimeout(do_stuff, 0);

    //do next opearions...
}
函数异步_操作(){
函数do_stuff(){
var i=0;

while(i用递归函数替换while循环

使用
setTimeout
调用函数的每次迭代

function do_stuff() {
   var i = 0;
   really_do_stuff();

   function really_do_stuff() {
      //do some stuff (to be more specific: localforage.setItem)
      ++i;
      if (i < 1000000000) {
          setTimeout(really_do_stuff, 1);
      } else {
          //do next opearions...
      }
   }
}
函数do_stuff(){
var i=0;
真的吗;
函数真的做什么{
//做一些事情(更具体地说:localfough.setItem)
++一,;
如果(i<100000000){
setTimeout(真的做什么,1);
}否则{
//下一步行动。。。
}
}
}

您可能希望在
really\u do\u stuff
中有一个while循环,这样批处理大小就可以大于
1
,因为
setTimeout
将引入延迟(从而导致性能损失)。

用递归函数替换while循环

使用
setTimeout
调用函数的每次迭代

function do_stuff() {
   var i = 0;
   really_do_stuff();

   function really_do_stuff() {
      //do some stuff (to be more specific: localforage.setItem)
      ++i;
      if (i < 1000000000) {
          setTimeout(really_do_stuff, 1);
      } else {
          //do next opearions...
      }
   }
}
函数do_stuff(){
var i=0;
真的吗;
函数真的做什么{
//做一些事情(更具体地说:localfough.setItem)
++一,;
如果(i<100000000){
setTimeout(真的做什么,1);
}否则{
//下一步行动。。。
}
}
}

您可能希望在
really\u do\u stuff
中有一个while循环,这样批处理大小就可以大于
1
,因为
setTimeout
将引入延迟(从而导致性能损失)。

用递归函数替换while循环

使用
setTimeout
调用函数的每次迭代

function do_stuff() {
   var i = 0;
   really_do_stuff();

   function really_do_stuff() {
      //do some stuff (to be more specific: localforage.setItem)
      ++i;
      if (i < 1000000000) {
          setTimeout(really_do_stuff, 1);
      } else {
          //do next opearions...
      }
   }
}
函数do_stuff(){
var i=0;
真的吗;
函数真的做什么{
//做一些事情(更具体地说:localfough.setItem)
++一,;
如果(i<100000000){
setTimeout(真的做什么,1);
}否则{
//下一步行动。。。
}
}
}

您可能希望在
really\u do\u stuff
中有一个while循环,这样批处理大小就可以大于
1
,因为
setTimeout
将引入延迟(从而导致性能损失)。

用递归函数替换while循环

使用
setTimeout
调用函数的每次迭代

function do_stuff() {
   var i = 0;
   really_do_stuff();

   function really_do_stuff() {
      //do some stuff (to be more specific: localforage.setItem)
      ++i;
      if (i < 1000000000) {
          setTimeout(really_do_stuff, 1);
      } else {
          //do next opearions...
      }
   }
}
函数do_stuff(){
var i=0;
真的吗;
函数真的做什么{
//做一些事情(更具体地说:localfough.setItem)
++一,;
如果(i<100000000){
setTimeout(真的做什么,1);
}否则{
//下一步行动。。。
}
}
}
您可能需要在
really\u do\u stuff
中使用while循环,这样您的批处理大小就可以大于
1
,因为
setTimeout
将引入延迟(从而导致性能损失)。

看看Web工作人员看看Web工作人员看看Web工作人员看看Web工作人员看看Web工作人员看看Web工作人员看看Web工作人员看看Web工作人员