当前位置:  开发笔记 > 编程语言 > 正文

Ajax并发

如何解决《Ajax并发》经验,为你挑选了2个好方法。

我有一个Web应用程序,其中有一个不断倒计时的计时器.同时,客户端经常检查服务器以查看是否有更多时间添加到计时器.代码看起来像这样:

function tick() {
    // This function is called once every second
    time -= 1;
    redisplay(time);
};
function update(newtime) {
    // This function is called whenever the ajax request
    // to the server yields a new time
    time = newtime;
};

当然,它比这更复杂,但你可以看到固有的竞争条件.如果更新和滴答功能都试图同时修改time怎么办?

坦率地说,我不太了解如何处理这种并发问题的javascript:是否有一种简单的方法可以做到这一点,或者如果没有,有人可以指向我可以了解更多信息的资源吗?

谢谢.



1> ShZ..:

您没有竞争条件,因为Javascript不会同时执行.

每次从异步操作(AJAX setTimeout等)触发回调时,该回调必须在另一个异步操作的另一个回调被调用之前完成执行.所以,如果update()正在运行,没有其他Javascript.一旦update()完成后,从异步操作之外的回调可发射(例如,tick()).有趣的是,这也是为什么setTimeout并不保证在达到超时的精确时刻执行的原因:其他一些javascript可能会阻止回调的执行.

查看http://ejohn.org/blog/how-javascript-timers-work/,了解有关这一切是如何工作的一些很好的信息.



2> PanCrit..:

Javascript是单线程的.没有竞争条件.在javascript中没有办法在两行中执行time = newtime;并且time -= 1;在执行期间重叠.实际上,这两个功能保证不会重叠.其中一个将运行,然后另一个将运行.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有