2011-12-19 59 views
1

我有一个异步的forEach通过阵列 var anArray = [.....values inside...];安全地更新异步foreach的值?

 anArray.forEach(function (s) { 
      ... 
     }); 

而且也将被更新2个全局变量循环:

var count = 0; 
var total = 0; 

在的foreach,我会更新这两个变量。由于foreach是异步的,我可能期望多次迭代同时运行。这意味着我的变量可能会被覆盖。

对于count,这很好,因为我所做的只是在每个循环中计数++。

但是,对于total,在每次查看期间将添加不同的值。

请问我有没有办法确保total在没有任何精度损失的情况下更新?

+0

你是什么意思与“精确” ?你是否依赖可能导致精确问题的'total'的顺序,即'a + b + c'或'c + b + a'? – pimvdb 2011-12-19 13:15:35

+0

什么是“异步forEach”? – nnnnnn 2011-12-19 13:21:35

+0

@nnnnnn道歉。我假设Array.forEach是异步的,但在阅读了一些答案后。它似乎不是! – tommi 2011-12-19 13:27:26

回答

2

有在Javascript没有线程。 “异步”仅仅意味着它会将事件发布到队列中,然后在主线程可用时对其进行评估。因此,你永远不会在JS中遇到任何类型的同步问题。

例如,如果运行:

setTimeout(function() {doSomeStuff1For(10secs)},1) 
setTimeout(function() {doSomeStuff2For(20secs)},1) 

这些事件会像这样被执行(考虑10秒调用获得幸运地成为第一):

1 sec: doSomeStuff1 
2 sec: doSomeStuff1 
... 
10 sec: ended doSomeStuff1 
11 sec: started doSomeStuff2 
... 
30 sec: ended doSomeStuff2.