JavaScript - 我是否需要实现并发控制

时间:2016-04-22 13:51:09

标签: javascript concurrency

我在JavaScript中实现一个简单的记录器,当页面上发生某些事件时(单击一个按钮,更改DOM等)收集消息,并使用AJAX定期将所有收集的消息发送到服务器调用:

var Logger = function () {
    var messages = [];

    var flush = function () {
        if (messages.length) {
            $.post("receive-logs.php", { messages: messages.toString() });
            messages = [];
        }
    };

    return {
        init: function () {
            setInterval(flush, 5000);
        },
        addMessage: function (message) {
            messages.push(message);
        }
    };
}();
Logger.init();

// Usage example: 
// $("#button1").on("click", function () { Logger.addMessage("button1 clicked"); })

我在这个实现中关注的是消息是否会丢失"丢失"如果在addMessage之后但在$.post之前调用messages = []

在许多文章中我都读到JavaScript在单线程环境中运行,因此开发人员永远不必担心锁定或并发控制等问题。这令人困惑,因为我认为没有理由说明上述情况是不可能的。

我的问题是:在这种情况下邮件是否可能丢失,我该如何避免?

0 个答案:

没有答案