如果我想要一个异步线程,我需要setTimeout吗?

时间:2014-02-07 16:11:24

标签: javascript asynchronous

更新: 我遇到的问题完全不同,我会完全删除这个问题,但既然有答案,我就不被允许。 / OP

我有一个非常复杂且难以提炼的脚本,但这是我正在做的事情的本质:

var modulesCount = 4;

// setup the modules object
for (var i = 1; i <= modulesCount; i++) {     
   composeModule(i);
}

我有一些奇怪的行为,似乎每次调用函数composeModule()都没有,所以我想,我是否必须使用setTimeout才能将线程拆分成say这样的4个不同的主题?这样说:

// setup the modules object
for (var i = 1; i <= modulesCount; i++) {     
   setTimeout(function() {
       composeModule(i);
   }, 1);
}

-------------------更新

试过这个

    var c = 1;
    for (var i=1;i<=modulesCount;i++) {     
       console.error('actual count is: '+c+' while variable i is: '+i);
       self.composeModule(i,initialCall);
       c++;
    }

检查我的变量i是否有问题但是在每个控制台输出中都是c。或者我是否完全误解了你们的观点?

2 个答案:

答案 0 :(得分:1)

如果你真的想编写那个循环,你需要将变量i放入一个闭包中:

// setup the modules object
for (var i = 1; i <= modulesCount; i++) {     
   (function (inner_i) {setTimeout(function() {
       composeModule(inner_i);
   }})(i), 1);
}

请参阅JavaScript closure inside loops – simple practical example

答案 1 :(得分:0)

要在javascript中拆分线程,有一个名为web worker的新函数。作为经验法则,工作者类似于Java中的线程。

请参阅以下内容以获取更多信息:https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers