我有一页有桌子的书。在页面加载时,此表将使用数据进行更新。一旦创建了表,我需要类似线程的东西,这样就可以每隔几秒钟刷新一次。
现在,在ajax调用中获取数据之后。如果我调用asyncThread() --表不加载在页面上,UI就挂起,并被固定在一个循环中。如何在调用asyncThread()函数时防止UI挂起?
$.ajax({
url: 'xxxxxxxxx',
contentType: 'application/html ; charset:utf-8',
type: 'GET'
}).success(function (result) {
$('#table')
.DataTable(
{
paging: false,
"ordering": false,
"language": {
"decimal": ",",
"thousands": "."
},
searching: false,
"scrollCollapse": true,
"scrollY": "75vh"
});
asyncThread();
}).error(function () {
});。
async function asyncThread() {
while (true) {
console.log('loop started');
setTimeout(function () {
console.log('sleep');
}, (3 * 1000))
}
}发布于 2018-10-02 10:51:07
让我们首先分析一下您的asyncThread方法
async function asyncThread() {
while (true) {
console.log('loop started');
setTimeout(function () {
console.log('sleep');
}, (3 * 1000))
}
}您在这里所做的工作表明,您不了解JavaScript引擎是如何工作的:
async方法返回一个隐式承诺,它们实际上不运行异步通常,对于这些轮询请求,您将依赖于setInterval或setTimeout。第一个将定期执行一个函数,直到调用clearInterval或卸载该页面为止;第二个将运行一次,除非在超时过期之前调用clearTimeout。
async表示该函数将返回一个承诺,然后您可以通过允诺链处理该承诺,或者从另一个async方法中,您可以await它的成功完成。
发布于 2018-10-02 10:54:14
好的,您有无限循环while (true) {...},它阻塞主线程。我想,你要找的是
function asyncThread() {
console.log('loop started');
setTimeout(() => {
console.log('sleep');
asyncThread();
}, 3000)
}https://stackoverflow.com/questions/52606701
复制相似问题