jquery - 为什么这个回调函数不会导致竞争条件?

标签 jquery node.js callback

我不明白为什么以下代码不会导致潜在的竞争条件。看起来 counttotalBytes 是可以被多个回调函数访问的变量,我觉得 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/

相关文章:

jquery - 使用 excel-bootstrap-table-filter jQuery 插件时如何对日期进行排序

javascript - Electron 将图像设置为壁纸(OS X 和 Windows)

mongodb - Mongoose、Cygwin 和 MongoDB - 不保存

json - 从 JSON Api 快速请求数据

javascript - jQuery $.Deferred 与 window.top.postMessage()

javascript - 如何将链接值从 "Choose"更改为 "Chosen"?

jquery - 使用Jquery设置隐藏字段的值

javascript - 在 Markdown 元素之间转换

javascript - 将回调与 Google Fusion Tables 一起使用

javascript - 如何仅在特定位置为 div 设置动画?