我在前端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秒钟。它在移动设备上非常引人注目。
答案 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