【发布时间】:2021-03-07 18:57:42
【问题描述】:
我正在尝试在 js 文件中添加睡眠/延迟功能,这个:
var webTest = function()
{
let regex = /^https?:\/\//;
let url = $('#list_urls').val().split('\n');
var xmlhttp = [], i;
var myObj2 = [], i;
for(let i = 0; i < url.length; i++)
{
(function(i) {
xmlhttp[i] = new XMLHttpRequest();
url[i] = url[i].replace(regex, '');
xmlhttp[i].open("GET", "https://website.com/API?key=<MY_API_KEY>&url="+url[i], false);
xmlhttp[i].onreadystatechange = function() {
if (xmlhttp[i].readyState === 4 && xmlhttp[i].status === 200) {
myObj2 = JSON.parse(xmlhttp[i].responseText);
document.getElementById("demo"+i).innerHTML = myObj2.results[1].categories;
}
};
xmlhttp[i].send();
})(i);
console.log(`The Server2: `+ myObj2);
}
}
我希望此脚本暂停 10 秒,然后再次执行工作,然后再次暂停 10 秒并这样做,直到文本长度大于循环中的 i!如果我单次运行,我的代码可以工作,但如果我在循环中运行,它就不起作用,因为 website 在 api 中有速率限制,所以这就是我尝试的原因添加睡眠功能。
所以我尝试的是 await sleep(); 方法,也尝试了 setTimeout 方法,但它没有按预期工作,它根本不起作用用我的代码!
等待睡眠();只是根本不起作用并显示味精 未捕获的 SyntaxError:await 仅在异步函数和异步生成器 webTestfile.js:27 中有效
【问题讨论】:
-
我希望此脚本暂停 10 秒,然后再次执行工作,然后再次暂停 10 秒! 您不能暂停代码。您可以做的是在延迟后运行更多代码,但调用堆栈上当前正在运行的函数必须在任何新代码开始之前完成。
-
是的,我知道 javascript 没有任何睡眠功能,但是在这里可以做些什么来实现至少 10-11 秒的延迟?尝试了 setTimeout 方法,但没有任何效果:/
标签: javascript arrays json xmlhttprequest