【发布时间】:2016-08-25 22:33:17
【问题描述】:
我正在学习 node.js atm,现在我在问自己:
普通数组有多“线程安全”?
例子:
var myArr = ["Alpha", "Beta", "Gamma", "Delta"];
ee.on('event', function(itemString) {
//Loop over an Array that could change its length while looping through
for(var i=0; i<myArr.length; i++) {
// delete the item out of the array
if(myArr[i] == itemString)
myArr.splice(i,1);
}
});
如果在 ee-Object 上触发了多个事件,是否有可能因为索引已经被拼接掉而导致 for 循环失败?
或者说不同:有一种方法可以确保循环不会因为任何元素可能被同一事件的另一个回调调用删除而跳过或失败?
谢谢 :)
【问题讨论】:
-
Node.js 是单线程的,因此您的代码不会被另一个线程中断。但是上面的代码被破坏了,你在迭代期间修改数组的方式会导致有时跳过元素。
-
我认为代码是正确的,假设数组的所有元素都不同。 (你可以跳过一个元素,但只有在你找到一个匹配的元素之后,这意味着没有更多的匹配元素,所以你不在乎。)
标签: javascript node.js