这个javascript中有竞争条件吗?

时间:2014-01-31 00:56:38

标签: javascript multithreading concurrency

在以下js片段

request = new XMLHttpRequest
request.open('GET', '/my/url', true)
request.send()

request.onload = function() {
  data = JSON.parse(this.response)
}

是否应该在send()之前分配负载以避免竞争条件。或者浏览器是否为您处理(通过在轮到分配时启动加载)。

1 个答案:

答案 0 :(得分:1)

您的请求应该更像:

var request = new XMLHttpRequest || new ActiveXObject('Microsoft.XMLHTTP');
request.open('GET', '/my/url');
request.onreadystatechange = function(){
  if(request.readyState == 4 && request.status == 200){
     console.log(request.responseText);
  }
}
request.send();

要进一步回答你的问题,request.send()最后应该发生,因为如果在将函数分配给request.onreadystatechange之前回复,则可能会出现问题,尽管回复的可能性很小那很快。