异步调用在 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 框架,默认情况下它将 运行 在单线程模式下。所以它没有服务于来自客户端的异步请求。
以下代码是我用于 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 框架,默认情况下它将 运行 在单线程模式下。所以它没有服务于来自客户端的异步请求。