function wait() {
let a = Date.now()
while (Date.now() - a < 3000) {
//loop
}
console.log('waiting ends...')
}
function start(){
console.log('starts...')
wait()
}
function end(){
console.log('ends...')
}
start()
end()
How can I set wait() execute asynchronously that lead to a output of "starts…, ends…, waiting ends…" without apply setTimeout function to wait()?
>Solution :
You can convert wait() to an async function an use await to postpone the rest of the function’s body:
async function wait() {
await true;
let a = Date.now()
while (Date.now() - a < 3000) {
//loop
}
console.log('waiting ends...')
}
function start(){
console.log('starts...')
wait();
}
function end(){
console.log('ends...')
}
start()
end()
Or you can do it with start():
function wait() {
let a = Date.now()
while (Date.now() - a < 3000) {
//loop
}
console.log('waiting ends...')
}
async function start(){
await console.log('starts...')
wait();
}
function end(){
console.log('ends...')
}
start()
end()
You can use queueMicrotask() to execute a function as a microtask (the same as immediately resolving a promise):
function wait() {
let a = Date.now()
while (Date.now() - a < 3000) {
//loop
}
console.log('waiting ends...')
}
function start(){
console.log('starts...')
queueMicrotask(wait);
}
function end(){
console.log('ends...')
}
start()
end()