我不明白为什么以下代码不会导致潜在的竞争条件。看起来 count
和 totalBytes
是可以被多个回调函数访问的变量,我觉得 count--
和 totalBytes += stats.size
可能会导致竞争,因为您无法保证传递给 fs.stat()
的回调函数的顺序(因为它是一个 IO 操作)。
var fs = require('fs');
var count = 0,
totalBytes = 0;
function calculateByteSize() {
fs.readdir(".", function (err, filenames) {
var i;
count = filenames.length;
for (i = 0; i < filenames.length; i++) {
fs.stat("./" + filenames[i], function (err, stats) {
totalBytes += stats.size;
count--;
if (count === 0) {
console.log(totalBytes);
}
});
}
});
}
calculateByteSize();
最佳答案
Javascript 只有一个线程,因此一次只有一个回调可以修改 count
。但是,不能保证回调的顺序。
关于jquery - 为什么这个回调函数不会导致竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44551288/