Cos'è il flusso di controllo asincrono in Node.js?

Cos E Il Flusso Di Controllo Asincrono In Node Js



Il flusso di controllo è la modalità di esecuzione in cui viene eseguito il processo residente dell'applicazione. Questo flusso aiuta molto quando si desidera eseguire prima una parte specifica dell'intero programma o dopo il completamento di un metodo casuale. Il flusso di esecuzione è solitamente impostato su asincrono o sincrono a seconda della natura del metodo utilizzato.

Questo articolo spiega il funzionamento e l'implementazione del flusso di controllo asincrono in Node.js.

Cos'è il flusso di controllo asincrono in Node.js?

Il flusso di controllo asincrono in Node.js si riferisce al modo in cui gestisci e controlli il flusso di esecuzione quando hai a che fare con operazioni asincrone, come effettuare richieste di rete, gestire eventi e così via. Sebbene Node.js sia progettato specificamente per una natura asincrona, è meglio garantire che il codice specifico venga eseguito nella sequenza prevista ed esegua una gestione degli errori in modo efficace.







Diamo un esempio di codice per migliorare il livello di comprensibilità del flusso di controllo asincrono:



era fsObj = richiedere ( 'fs' ) ;
//Funzione di richiamata astratta
funzione readFileAsync ( targetFilePath ) {
ritorno nuovo Promettere ( ( risolvere, respingere ) => {
fsObj. leggiFile ( percorsoFile di destinazione, 'utf-8' , ( errore, contenuto ) => {
Se ( errore ) {
rifiutare ( errore ) ;
} altro {
risolvere ( contenuto ) ;
}
} ) ;
} ) ;
}

// Funzione per eseguire più letture di file in sequenza
funzione asincrona readFileSequentially ( ) {
Tentativo {
cost file1Dati = attendere readFileAsync ( 'mionuovofile1.txt' ) ;
consolle. tronco d'albero ( 'Dati del primo file:' , file1Dati ) ;

cost file2Data = attendere readFileAsync ( 'usecase.txt' ) ;
consolle. tronco d'albero ( 'Dati del secondo file:' , file2Data ) ;

cost file3Data = attendere readFileAsync ( 'pacchetto.json' ) ;
consolle. tronco d'albero ( 'Dati del terzo file:' , file3Data ) ;
} presa ( errore ) {
consolle. errore ( 'Si è verificato un errore:' , errore ) ;
}
}

leggiFile in sequenza ( ) ;

La spiegazione del codice sopra è la seguente:



  • Innanzitutto, importa il ' fs ' e memorizza il suo oggetto nel modulo ' fsObj 'variabile.
  • Quindi, definire un ' leggiFileAsync() ' funzione denominata avente il singolo parametro di ' targetFilePath ' che contiene il percorso di un file di destinazione.
  • Questa funzione restituisce un ' promettere ' che contiene la funzione di callback richiesta composta da due parametri vale a dire ' risolvere ' E ' rifiutare ”.
  • All'interno della funzione di richiamata, richiamare il ' leggiFile() ' metodo fornito dal ' fs ' modulo. Inoltre, passa il parametro fornito di ' targetFilePath ' come primo parametro per il metodo 'readFile()'.
  • IL ' leggiFile ' Il metodo contiene anche la funzione di callback richiesta avente i parametri di ' errore ' E ' contenuto ”. Passa il ' errore ' dentro ' rifiutare() ' metodo in caso di verificarsi di errori e ' contenuto ' dentro ' risolvere() ' metodo in caso di errore non trovato.
  • Ora crea una funzione asincrona denominata ' leggiFileSequentialy() ' e contiene un ' prova a prendere 'blocco.
  • Dentro il ' Tentativo ', crea tre variabili memorizzando il risultato generato invocando il blocco ' già creato leggiFileAsync() ' funzione. Ogni volta che il percorso del file desiderato che deve essere eseguito viene passato all'interno di questa parentesi di funzione.
  • La parola chiave “ attendere ' viene anche posizionato dietro la funzione al momento dell'invocazione per interrompere il flusso di controllo fino al completamento dell'azione di lettura del file.
  • Inoltre, visualizzare le variabili sulla console per visualizzare il contenuto del file recuperato o letto.
  • Infine, richiama il contenitore “ leggiFileSequentialy() ' funzione.

Per eseguirlo, inserisci il codice sopra indicato nel file desiderato con estensione ' .js ' residente all'interno del tuo progetto Node.js. Il file principale nel nostro caso è “ controlFlow.js ', quindi il nostro comando di esecuzione sarà il seguente:





nodo controlloFlusso. js

L'output generato mostra che i dati per i file desiderati utilizzando il flusso di controllo asincrono vengono visualizzati in sequenza:



Quali sono le possibili cause e i passaggi per evitarli per il codice bloccato Node.js?

Il codice sincrono è anche conosciuto come “ Codice di blocco ' poiché interrompe l'esecuzione dei processi fino all'esecuzione del processo in esecuzione. Ciò si traduce in prestazioni e reattività scadenti dell'applicazione. Il codice di blocco si verifica in genere a causa di operazioni sincrone o legate alla CPU. Le possibili cause del blocco del codice e come evitarle sono riportate nella tabella seguente:

Cause del blocco del codice Soluzione per il blocco del codice
Utilizzo di operazioni sui file sincrone come fs.readFileSync(). Utilizza operazioni asincrone sui file come fs.readFile.
Utilizzo di operazioni legate alla CPU come calcoli pesanti o cicli di lunga esecuzione. Scarica le attività legate alla CPU ai thread di lavoro suddividendoli in blocchi più piccoli e non bloccanti.
Richieste di rete esterne lente a causa dell'utilizzo di richieste HTTP alle API remote Utilizza librerie HTTP asincrone come Axios o i moduli “http” o “https” integrati.
Query del database non ottimizzate Ottimizza le query del database utilizzando gli strumenti di ottimizzazione delle query forniti dal database.
Utilizzo di cicli infiniti o cicli stretti senza interruzioni. Assicurarsi che i cicli abbiano condizioni di uscita e non vengano eseguiti all'infinito.

Conclusione

Il flusso di controllo asincrono utilizza le parole chiave “ asincrono/attendo ” per modificare o controllare il flusso di esecuzione in modo asincrono. Il callback per il metodo asincrono richiesto viene estratto e archiviato in una funzione separata. Questa funzione viene quindi richiamata con l'aiuto della parola chiave wait in modo sequenziale insieme ad altri metodi, se desiderato. Queste funzioni vengono archiviate in un'altra funzione asincrona personalizzata che viene quindi richiamata per avviare l'esecuzione. Questa guida ha spiegato il flusso di controllo asincrono in Node.js.