如何为settimeout函数创建队列。
我想创建带有 settimeout 的函数以在 2 秒后打印控制台,但如果相同的 settimeout 已经在等待执行,则应在完成第一个函数后执行新的超时函数
<script>
function print_console(text,time)
{
if(timeout is not already set)
{
timeout=setTimeout(function(){console.log(text);},time);
}
else
{
time=addition of time of already setted timeout + argument time
timeout=setTimeout(function(){console.log(text);},time);
}
}
print_console('i will print in 1000 minisec',1000);
print_console('i will print in 3000 minisec',2000);
print_console('i will print in 6500 minisec',3500);
.................
.............
</script>
我期望此函数在控制台输出屏幕上输出--
我将在 1000 微秒内打印 --- 07/08/2019 04:01:01
我将在 3000 微秒内打印 --- 07/08/2019 04:01:03
我将在 6500 微秒内打印 --- 07/08/2019 04:01:06
最佳答案
您可以为此使用async/await
:
(async () => {
async function print_console(text,time) {
await new Promise((res, rej) => {
setTimeout(() => (console.log(text), res()), time);
});
}
await print_console('i will print in 1000 minisec',1000);
await print_console('i will print in 3000 minisec',2000);
await print_console('i will print in 6500 minisec',3500);
})();
编辑:OP想要在此范围之外调用它。然后我会使用另一种方法,使用 IFEE 将数组、标志 var 和函数调用者存储到函数作用域中:
const print_console = (() => {
const arr = [];
let isProcessing = false;
setInterval(() => {
if(isProcessing) return;
const next = arr.shift();
if(next) {
isProcessing = true;
setTimeout(() => {
console.log(next.text);
isProcessing = false;
}, next.time);
}
});
return (text, time) => {
arr.push({text, time});
}
})();
print_console('i will print in 1000 minisec',1000);
print_console('i will print in 3000 minisec',2000);
print_console('i will print in 6500 minisec',3500);
关于javascript - settimeout 并等待(如果已设置超时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57392420/