【发布时间】:2015-03-19 02:47:18
【问题描述】:
我目前正在尝试搜索一下 Javascript 如何处理并行或异步调用中的数据竞争。就我而言,在我的代码上进行异步处理的唯一方法是通过 AJAX 调用(如果我错了,请纠正!),但我想如果有其他方法,它也会被同样处理。
所以,作为一个例子,假设我有这个 AJAX 调用:
jQuery.ajax({
//stuff
success: function (data) {
//do some fancy things with some DOM elements
},
//possibly more stuff
});
现在假设在该调用之外我正在运行其他事情,并且我最终使用我的成功回调在我的 AJAX 调用中处理的相同 DOM 元素执行某些操作(即在我的成功回调的同时将元素附加到表上尝试做同样的事情)。换句话说,我的配置以某种数据竞争告终。
Javascript 如何处理这个问题?当我的 AJAX 响应返回时,我当前正在运行的函数是否会被抢占以便执行 AJAX 调用?有什么东西可以保证我对 DOM 元素(或 javascript 变量)所做的事情是某种原子操作吗?所以如果我需要运行一个必须是原子的函数,我怎么能告诉解释器呢?
另外,是否对 Javascript 进行了一些屏蔽以防止死锁?比如说,如果我运行两个并行的 AJAX 调用并且每个调用都依赖于另一个的完成。
【问题讨论】:
-
如果某些事情依赖于异步操作的结果,那么一切都必须变为异步,使用嵌套回调或使用承诺。
标签: javascript jquery ajax multithreading asynchronous