Eloquent JavaScript



Download 2,16 Mb.
Pdf ko'rish
bet112/165
Sana09.07.2022
Hajmi2,16 Mb.
#762987
1   ...   108   109   110   111   112   113   114   115   ...   165
Bog'liq
Eloquent JavaScript

The event loop
Asynchronous programs are executed piece by piece. Each piece may start some
actions and schedule code to be executed when the action finishes or fails. In
between these pieces, the program sits idle, waiting for the next action.
197


So callbacks are not directly called by the code that scheduled them. If I
call
setTimeout
from within a function, that function will have returned by the
time the callback function is called. And when the callback returns, control
does not go back to the function that scheduled it.
Asynchronous behavior happens on its own empty function call stack. This
is one of the reasons that, without promises, managing exceptions across asyn-
chronous code is hard. Since each callback starts with a mostly empty stack,
your
catch
handlers won’t be on the stack when they throw an exception.
try {
setTimeout(() => {
throw new Error("Woosh");
}, 20);
} catch (_) {
// This will not run
console.log("Caught!");
}
No matter how closely together events—such as timeouts or incoming requests—
happen, a JavaScript environment will run only one program at a time. You
can think of this as it running a big loop
around
your program, called the
event
loop
. When there’s nothing to be done, that loop is stopped. But as events
come in, they are added to a queue, and their code is executed one after the
other. Because no two things run at the same time, slow-running code might
delay the handling of other events.
This example sets a timeout but then dallies until after the timeout’s in-
tended point of time, causing the timeout to be late.
let start = Date.now();
setTimeout(() => {
console.log("Timeout ran at", Date.now() - start);
}, 20);
while (Date.now() < start + 50) {}
console.log("Wasted time until", Date.now() - start);
// → Wasted time until 50
// → Timeout ran at 55
Promises always resolve or reject as a new event. Even if a promise is already
resolved, waiting for it will cause your callback to run after the current script
finishes, rather than right away.
Promise.resolve("Done").then(console.log);
198


console.log("Me first!");
// → Me first!
// → Done
In later chapters we’ll see various other types of events that run on the event
loop.

Download 2,16 Mb.

Do'stlaringiz bilan baham:
1   ...   108   109   110   111   112   113   114   115   ...   165




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish