Homepage » Coding » A szinkron és aszinkron JavaScript megértése - 1. rész

    A szinkron és aszinkron JavaScript megértése - 1. rész

    egyidejű és aszinkron zavaró fogalmak a JavaScript-ben, különösen a kezdők számára. Két vagy több dolog van egyidejű amikor ők egyszerre történik (szinkronban), és aszinkron, ha nem (nem szinkronban).

    Bár ezek a definíciók könnyen bevihetők, valójában bonyolultabb, mint amilyennek látszik. Figyelembe kell vennünk pontosan mi van szinkronban, és mi nem.

    Valószínűleg a Normál funkció a JavaScript szinkronban, ugye? És ha valami ilyesmi setTimeout () vagy AJAX, amellyel együtt dolgozol, akkor aszinkronnak tekintjük, igen? Mi van, ha ezt mondom mindkét aszinkron módon vannak?

    A magyarázatot miért, X segítségért fordulnunk kell.

    1. forgatókönyv - X úr szinkronitást próbál

    Íme a beállítás:

    1. X úr valaki, aki nehéz kérdésekre válaszolhat, és elvégezheti a kért feladatokat.
    2. Az egyetlen módja annak, hogy kapcsolatba léphessen vele telefonhíváson keresztül.
    3. Bármilyen kérdés vagy feladat is van, annak érdekében, hogy megkérje X úr segítségét annak végrehajtásához; hívod.
    4. X megadja a választ vagy befejezi a feladatot azonnal, és tudod kész.
    5. Leteszed a vevő érzés tartalmát, és megy ki egy filmet.

    Amit most csináltál, egy szinkron kommunikáció meghallgatta, amikor megkérdezte tőle a kérdést, és hallgatta, amikor válaszolt rá.

    2. forgatókönyv - X nem elégedett a szinkronizmussal

    Mivel X annyira hatékony, elkezd több hívást fogadni. Szóval mi történik, ha hívod, de már elfoglalt beszél valakivel? Nem fogja tudni megkérdezni a kérdést - nem egészen addig, amíg meg nem kapja a hívását. Minden, amit hallani fog, elfoglalt hang.

    Tehát mit tehet X úr a küzdelem érdekében?

    Ahelyett, hogy hívásokat kezdeményezne:

    1. X úr egy új srácot vesz fel, Mr. M, és ad neki egy üzenetrögzítőt a hívók számára üzeneteket hagyni.
    2. M feladata küldjön egy üzenetet az üzenetrögzítőtől X-hez, amikor tudja, hogy X úr teljesen befejezte az összes korábbi üzenet feldolgozását, és máris megtörtént szabadon vehet egy újat.
    3. Tehát most, amikor felhívja őt, ahelyett, hogy elfoglalt hangot kapna, akkor üzenetet hagyhat X úrnak várjon, hogy visszahívjon (még nincs filmidő).
    4. Miután X úr az összes sorba állított üzenettel az Ön előtt érkezett, meg fogja vizsgálni a problémát, és visszahívlak válaszol.

    Most itt van a kérdés: az eddigi cselekedetek szinkron vagy aszinkron?

    Vegyes. Amikor elhagyta az üzenetet, X nem hallgatta meg, így a negyedik kommunikáció aszinkron volt.

    De amikor válaszolt, hallgattál, melyik a visszatérő kommunikációt szinkronban teszi.

    Remélem, hogy most már jobban megértetted, hogy a szinkronitás hogyan érzékelhető a kommunikáció szempontjából. Ideje behozni a JavaScript-et.

    JavaScript - aszinkron programozási nyelv

    Amikor valaki címkézést ad a JavaScript aszinkronnak, akkor általában mit jelentenek hagyjon üzenetet számára, és a hívását nem blokkolta elfoglalt hangjelzéssel.

    A függvényhívások soha ne irányítsa a JavaScript-et, szó szerint megtették üzeneteken keresztül.

    A JavaScript a üzenetsor a bejövő üzenetek (vagy események) megtartása. egy esemény-loop (egy üzenet-diszpécser) ezeket az üzeneteket egymás után elküldi a hívási lista ahol az üzenetek megfelelő funkciói vannak keretként halmozott (függvényérvek és változók) a végrehajtáshoz.

    A hívásköteg a meghívott kezdeti függvény keretét és a hívott funkciók bármely más keretét tartja beágyazott hívásokon keresztül a tetején .

    Amikor egy üzenet csatlakozik a várakozási sorhoz, addig vár, amíg a hívás verem meg nem jelenik az előző üzenet összes képének üres, és mikor, az esemény-hurok dequeues az előző üzenetet, és hozzáadja az aktuális üzenet megfelelő képkockáit a hívási veremhez.

    Az üzenet ismét vár, amíg a hívás verem meg nem jelenik üres a saját megfelelő kereteiről (azaz az összes halmozott függvény végrehajtása véget ért), majd dequeued.

    Fontolja meg a következő kódot:

     foo ()  funkciósáv () foo ();  funkció baz () bar ();  baz (); 

    A futtatható függvény BAZ () (a kódrészlet utolsó sorában), amelyre egy üzenet kerül a sorba, és amikor az esemény-hurok felveszi azt, a hívás verem elkezdi a kereteket egymásra rakni mert BAZ (), bár(), és ize () a megfelelő végrehajtási pontokon.

    Miután a funkciók végrehajtása egyenként befejeződött, a keretük eltávolították a híváskötegből, amíg az üzenet megérkezik még vár a sorban, amíg BAZ () ki van téve a veremből.

    Ne feledje, hogy a funkcióhívások soha ne irányítsa a JavaScript-et, megtették üzeneteken keresztül. Tehát, ha valaki azt mondja, hogy a JavaScript maga aszinkron programozási nyelv, feltételezzük, hogy a beépítettről beszélnek “üzenetrögzítő”, és hogyan szabadon hagyhatja az üzeneteket.

    De mi van a specifikus aszinkron módszerekkel?

    Eddig nem értek meg olyan API-kat, mint például setTimeout () és AJAX, ezek azok, amelyek kifejezetten aszinkronnak nevezik. Miért van az, hogy?

    Fontos megérteni, hogy pontosan mi szinkron vagy aszinkron. A JavaScript, az események és az esemény-hurok segítségével gyakorolható az üzenetek aszinkron feldolgozása, de ez nem jelenti azt minden a JavaScriptben aszinkron.

    Ne feledje, hogy azt mondtam, hogy az üzenet nem ment el, amíg a hívásköteg nem volt üres a megfelelő keretekről, úgy, mintha nem hagyott volna egy filmet, amíg nem kapta meg a választ - ez az szinkron, ott vársz amíg a feladat befejeződik, és megkapod a választ.

    Várakozás nem ideális minden forgatókönyvben. Mi van, ha az üzenet elhagyása után a várakozás helyett elhagyhatja a filmet? Mi van, ha egy függvény visszavonulhat (a hívásköteg kiürítése), és az üzenete még a funkció befejezése előtt is lehúzható? Mi van, ha a kódot aszinkron módon hajtja végre?

    Ez az az API, ahol például az setTimeout () és az AJAX jön a képbe, és amit csinálnak,… tartsák be, ezt nem tudom megmagyarázni anélkül, hogy visszatérnék X úrhoz, amit a cikk második részében fogunk látni. Maradjon velünk.