Я пытаюсь лучше понять асинхронные функции и обещания в JS.Для этого я написал пример программы, цель которой - вызвать функцию, которая выполняет занятую работу (целенаправленно не используя async setTimeout
, поскольку я хочу имитировать длительный процесс), но немедленно возвращается.Тем не менее, я не могу понять, почему это не работает.
test();
async function intense(){
var start = new Date().getTime();
for (var i = 0; i < 1e6; i++) {
if ((new Date().getTime() - start) > 2000){
break;
}
}
console.log("Done with async work");
}
async function test(){
console.log("Print 1");
intense(); // does some busy work for a few seconds
console.log("Print 2"); // want this to print immediately after print 1
}
Когда я запускаю его, я получаю:
Print 1
Done with async work
Print 2
И мне бы хотелось, чтобы оно было:
Print 1
Print 2
Done with async work
Iдумал, что он напечатает последнюю последовательность, потому что я объявил функцию intense()
асинхронной, поэтому он немедленно вернет обещание и продолжит работу асинхронно.
Я даже пытался реорганизовать функцию intense
, чтобы получить обещание, которое разрешается немедленно, но безрезультатно.
async function intense(){
return new Promise((resolve)=> {
resolve();
var start = new Date().getTime();
for (var i = 0; i < 1e6; i++) {
if ((new Date().getTime() - start) > 2000){
break;
}
}
console.log("Done with async work");
}, null)
}
Чего мне не хватает?