Hvordan vente eller sove kodeutførelsen i JavaScript

Hvordan vente eller sove kodeutførelsen i JavaScript
Sove er en funksjon som er til stede på de fleste programmeringsspråk og brukes til å utsette utførelsen av kode for en spesifikk tid. JavaScript har ikke denne funksjonen, så vi bruker setTimeout () funksjon for å utføre den samme oppgaven. Selv om det ikke fungerer nøyaktig som vi forventer av søvnfunksjonen, vil vi bruke den til å bygge vår egen tilpassede søvnfunksjon i JavaScript, i denne artikkelen.

Hvis vi for eksempel trenger å logge tre meldinger til konsollen med en forsinkelse på ett sekund, kan vi ikke gjøre det ved å bruke søvnfunksjonen i JavaScript, da det ikke er tilgjengelig. Men vi kan jobbe rundt dette ved å bruke setTimeout () funksjon.

Hva er metoden Settimeout ()?

De setTimeout () Metoden brukes til å angi en tidtaker for å utsette utførelsen av kode. Den utfører det spesifiserte kodestykket etter at tidtakeren er utløper.

Mange devs som har jobbet med sove() funksjon finn setTimeout () å være forvirrende. Dette er fordi de tar feil av setTimeout () funksjon å være en versjon av sove() Funksjon i JavaScript.

Dessverre setTimeout () har sine egne regler og fungerer ikke slik sove() funksjon gjør det JavaScript Devs må komme med geniale løsninger for å få det til å fungere som en sove() funksjon.

I denne guiden vil vi se på flere slike løsninger og forklare hvordan vi kan bruke setTimeout () Funksjon for å pause utførelsen av JavaScript -kildekoden og vente mellom påfølgende kodelinjer.

i motsetning til sove() funksjon, hvis vi bare legger en forsinkelse på ett sekund ved å bruke setTimeout () Metode mellom linjene til JavaScript -koden, den fungerer ikke:

setTimeout (1000)
konsoll.Logg ("Vis etter ett sekund")
setTimeout (1000)
konsoll.Logg ("Vis etter et annet sekund")

Koden i eksemplet over vil utføre uten forsinkelse som om setTimeout () Funksjon eksisterer ikke.

Problemet med koden gitt ovenfor er at setTimeout () Metode forsinker bare utførelsen av funksjonen som sendes til den som en tilbakeringingsfunksjon. Imidlertid ga vi bare en "forsinkelse”Argument når det faktisk er ment å få to forskjellige argumenter. Det første argumentet antas å være en tilbakeringingsfunksjon, og det andre argumentet antas å være "forsinkelse”. La oss nå prøve å gjøre det og se hva som skjer:

setTimeout (() => konsoll.Logg ("Vis etter ett sekund"), 1000)
setTimeout (() => konsoll.Logg ("Vis etter et annet sekund"), 1000)

Denne gangen setTimeout () Funksjon vil fungere, men ikke som den skal, da begge konsollloggmeldingene vil vises samtidig i stedet for å ha en forsinkelse på 1000 millisekunder mellom dem.

Så hvorfor mislyktes Settimeout ()?

Grunnen til setTimeout () mislykkes i eksemplet over er at setTimeout () Funksjonen fungerer synkront i JavaScript-kode, men tilbakeringingsfunksjonen i Settimeout () -funksjonen oppretter en ny oppføring i den asynkrone oppgavekøen som utføres etter den spesifiserte tiden.

Siden den spesifiserte tiden i begge setTimeout () Funksjonen var den samme, og de ble utført samtidig på grunn av utførelse.

Som du kan se, setTimeout () er ikke en eksakt kopi av sove() funksjon, snarere det bare køer opp kode for senere utførelse. Så spørsmålet oppstår, hvordan får vi det til å fungere som en sove() funksjon. Vi kan gjøre dette ved å bruke økende timeouts når vi ringer setTimeout () funksjon:

setTimeout (() => konsoll.Logg ("Vis etter ett sekund"), 1000)
setTimeout (() => konsoll.Logg ("Vis etter et annet sekund"), 2000)

Dette fungerer fordi den nye oppføringen i køen opprettes omtrent samtidig, men disse oppføringene må vente på forskjellige mengder tid til å bli utført.

Metoden gitt ovenfor er metoden som brukes til å utsette utførelsen av noen deler av koden mens de andre delene kjører synkront. Imidlertid, hvis du vil stoppe utførelsen av hele JavaScript -koden mens du asynkront utfører noen andre deler, må du opprette en skikk sove() funksjon.

Hvordan skrive en søvnfunksjon

I JavaScript kan vi lage en skikk sove() funksjon ved å bruke løfter, asynk. Dette fungerer nøyaktig som en sove() funksjon ville på noe annet språk.

Imidlertid denne skikken sove() Funksjon må brukes med det avvente nøkkelordet og skal kalles innenfra async -funksjoner.

var sleep = (forsinkelse) => nytt løfte ((løse) => setTimeout (Resolve, forsinkelse))
var repeatMessage = async () =>
Venter søvn (1000)
konsoll.Logg ("Vis etter ett sekund")
Venter søvn (1000)
konsoll.Logg ("Vis etter et annet sekund")

RepeatMessage ();

Nå, ved å bruke denne tilpassede Build Sleep Method, kan du stoppe utførelsen av JavaScript -koden for ønsket tid.

Konklusjon

JavaScript har ikke sove() Funksjon som standard for å utsette utførelsen av kode, men dens asynkrone natur kan brukes til å oppnå den samme oppgaven. Det innebygde setTimeout () Metode kan brukes til å utsette utførelsen av kode, men for å virkelig gjøre koden asynkron i JavaScript og få den til å fungere som sove() Funksjon vi trenger å bruke løftene, avvente og async -funksjoner. I denne artikkelen lærte vi å lage skikk sove() Funksjoner i JavaScript.