异步调用在 vanilla javascript 中不起作用

Async call not working in vanilla javascript

以下代码是我用于 http 长轮询的前端代码。在此我期望代码 setTimeout(getChat, 0) 异步调用该方法。但是,当 getChat 方法的 XHR 挂起时,所有后续不同方法的 XHR 也会进入挂起状态。

discussTask = function(taskId) {
  taskIdChat = taskId
  getChat() // initial call
}
var getChat = function() {
  taskId = taskIdChat
  payLoad = {
    'task_id': taskIdChat,
    'recent_message_id': recentMessageId
  }
  var xmlhttp = XHR('/chat/sync', 'POST', payLoad)
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4) {
      buildChat(JSON.parse(xmlhttp.responseText))
      setTimeout(getChat, 0) // Async recursive call
    }
  }
}
var XHR = function(action, method, payLoad) {
  var xmlhttp = new XMLHttpRequest()
  xmlhttp.open(method, action, true)
  xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
  xmlhttp.send(JSON.stringify(payLoad))
  return xmlhttp
}

发现问题。问题不在客户端。我正在使用 flask 框架,默认情况下它将 运行 在单线程模式下。所以它没有服务于来自客户端的异步请求。