将for循环转为异步

时间:2014-06-29 08:08:36

标签: javascript jquery angularjs asynchronous promise

我在前端Javascript中有这样的东西:

function myfunc() {
  for (var i=0; i<=1000000000; i++)
    // Do something
  return data;
}

我想以异步方式调用myfunc(),以便我可以传递回调而不是等待循环完成。

有办法做到这一点吗?我可以使用或不使用AngularJS / jQuery

更新1:

“做某事”部分中的内容只是基本的数学计算。它不需要花费太多时间来进行一次迭代,但由于循环次数,这会阻塞浏览器。

没有ajax请求,我打算不在Node.js服务器端执行此操作。

更新2:

我只想更加具体地谈论“做某事”。这是画布处理。参见

https://github.com/girliemac/Filterous/blob/master/src/filterous.js#L73

for (var i = 0; i < d.length; i += 4) {
    var r = d[i];
    var g = d[i + 1];
    var b = d[i + 2];
    // CIE 1931 luminance
    var avg = 0.2126*r + 0.7152*g + 0.0722*b;
    // d is a reference to pixels.data, so you do not need to reassign it
    d[i] = d[i + 1] = d[i + 2] = avg
}

也许有一种方法可以实现这种异步方式,因此它不会冻结浏览器或iOS Safari 2秒钟。它在移动设备上非常引人注目。

2 个答案:

答案 0 :(得分:1)

回调是非常简单的事情

function myfunc(callback) {
  for (var i=0; i<=1000000000; i++)
    // Do something

  callback(data);
}

所以你可以像

一样调用它
myfunc(function(data){


});

答案 1 :(得分:-2)

像这样称呼它

function myfunc() {
  for (var i=0; i<=1000000000; i++)
    // Do something
  return data;
}

$timeout(myfunc, 0);

在控制器/服务中注入$ timeout