JSFiddle - React, Tailwind, and code Playground
HTML
Console.log(F12 button)
JavaScript
var x = 1; //это x, значение по умолчанию - 1, его следует обновить в будущем, и вернуть новое x.
var delay = 1000; //задержка в миллисекундах...
function sleepFor( sleepDuration ){ //функция для того, чтобы спать. Пока она исполняется - весь скрипт стопорится, блядь.
var now = new Date().getTime();
while(new Date().getTime() < now + sleepDuration){} //Делать грандиознейшее - нихуя. В этом месте нихуя - многогранно зацикливается, оттого и ступор.
}
function update_x(){ //функция призвана - обновить существующий x
console.log("Медленная функция, здесь, просто спит - 5 сек...");
sleepFor(5000);
x += 1; //увиличить его значение на 1
console.log("Медленная функция, внезапно - проснулась, обновила x (x = "+x+"), и возвращает его.");
return x; //и вернуть его.
}
function func(){ //Это - обычная, не асинхронная функция. Она должна обновить x, после выполнения медленной функции и вернуть его.
async function f(delay) { //Эта асинхрнная функция - она ждёт выполнения медленной функции, и возвращает "новый x", как значение в Promise.
let promise = new Promise(
(resolve, reject) =>
{
setTimeout(() => resolve( ( update_x() ) ), delay) //это медленная функция. Она может исполняться - годами. Призвана вернуть новый x с задержкой delay.
}
);
return await promise; // асинхронная функция будет ждать "новый x" пока promise не будет "resolved", и ВЕРНЁТ ЕГО, этот x, из функции - аж только потом;
}
console.log("start... x = ", x); //Перед запуском - показать изначальный x...
//Ждать выполнения медленной функции, вызываемой из f и показать "новый x"...
(async () => {return (console.log("Promise was been resolved! old x =", x, ", new x =", await f(delay)));})() // а вот так - работает и в скрипте и в консоли.
setTimeout(
function(){
console.log("now x = ", x); //ну и желательно бы - показать обновленный x
}
,
2*delay //уже после всего этого...
);
//но это ещё не всё. Теперь же надо его вернуть, этот...