Tento zápis vysvětluje fungování a implementaci asynchronního řídicího toku v Node.js.
Co je asynchronní řídicí tok v Node.js?
Asynchronní řídicí tok v Node.js odkazuje na způsob, jakým řídíte a řídíte tok provádění při práci s asynchronními operacemi, jako je vytváření síťových požadavků, zpracovávání událostí a tak dále. Přestože je Node.js speciálně navržen pro asynchronní povahu, je lepší zajistit, aby se konkrétní kód spouštěl v zamýšleném pořadí a prováděl efektivní zpracování chyb.
Podívejme se na příklad kódu pro zvýšení úrovně srozumitelnosti asynchronního řídicího toku:
byl fsObj = vyžadovat ( 'fs' ) ;
//Abstrakce funkce zpětného volání
funkce readFileAsync ( targetFilePath ) {
vrátit se Nový Slib ( ( vyřešit, odmítnout ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( chyba, obsah ) => {
-li ( chyba ) {
odmítnout ( chyba ) ;
} jiný {
odhodlání ( obsah ) ;
}
} ) ;
} ) ;
}
// Funkce pro provádění čtení více souborů za sebou
asynchronní funkce readFileSequentally ( ) {
Snaž se {
konst soubor1Data = čekat readFileAsync ( 'mynewfile1.txt' ) ;
řídicí panel. log ( 'První data souboru:' , soubor1Data ) ;
konst soubor2Data = čekat readFileAsync ( 'usecase.txt' ) ;
řídicí panel. log ( 'Data druhého souboru:' , soubor2Data ) ;
konst soubor3Data = čekat readFileAsync ( 'package.json' ) ;
řídicí panel. log ( 'Data třetího souboru:' , soubor3Data ) ;
} chytit ( chyba ) {
řídicí panel. chyba ( 'Vyskytla se chyba:' , chyba ) ;
}
}
readFileSequentally ( ) ;
Vysvětlení výše uvedeného kódu je následující:
- Nejprve importujte „ fs “ a uložte jeho objekt do “ fsObj “proměnná.
- Poté definujte „ readFileAsync() “ pojmenovaná funkce s jediným parametrem “ targetFilePath “, který obsahuje cestu k cílovému souboru.
- Tato funkce vrací „ slib “, který obsahuje požadovanou funkci zpětného volání sestávající ze dvou parametrů, a to „ odhodlání ' a ' odmítnout “.
- Uvnitř funkce zpětného volání vyvolejte „ readFile() “ metoda poskytovaná „ fs “modul. Předejte také zadaný parametr „ targetFilePath ” jako první parametr pro metodu “readFile()”.
- ' readFile “ metoda také obsahuje požadovanou funkci zpětného volání s parametry “ chyba ' a ' obsah “. Předejte „ chyba ' do ' odmítnout() “ metoda v případě výskytu chyb a “ obsah ' do ' odhodlání() ” metoda v případě, že nebyla nalezena chyba.
- Nyní vytvořte asynchronní funkci s názvem „ readFileSequentialy() “ a obsahuje „ Zkus chytit ”blok.
- Uvnitř ' Snaž se ” bloku, vytvořte tři proměnné ukládající výsledek vygenerovaný vyvoláním již vytvořeného “ readFileAsync() funkce “. Pokaždé, když je v této závorce funkce předána cesta k požadovanému souboru, který je třeba provést.
- Klíčové slovo ' čekat ” je také umístěn za funkcí v době vyvolání, aby se zastavil řídicí tok, dokud není dokončena akce čtení souboru.
- Také zobrazte proměnné na konzole, abyste zobrazili načtený nebo přečtený obsah souboru.
- Nakonec vyvolejte obsah obsahující „ readFileSequentialy() funkce “.
Pro spuštění umístěte výše uvedený kód do požadovaného souboru s příponou „ .js ” sídlící ve vašem projektu Node.js. Hlavní soubor v našem případě je „ controlFlow.js “, takže náš příkaz k provedení bude následující:
ovládání uzluFlow. js
Vygenerovaný výstup ukazuje, že data pro požadované soubory pomocí asynchronního řídicího toku se zobrazují v pořadí:
Jaké jsou možné příčiny a kroky, jak se vyhnout blokovanému kódu Node.js?
Synchronní kód je také známý jako „ Blokový kód “, protože zastaví provádění procesů až do spuštění běžícího procesu. To má za následek špatný výkon aplikace a odezvu. Blokovací kód se obvykle vyskytuje v důsledku synchronních operací nebo operací vázaných na CPU. Možné příčiny blokování kódu a jak se jim vyhnout jsou uvedeny níže v tabulce:
Příčiny blokování kódu | Řešení pro blokování kódu |
Použití synchronních operací se soubory, jako je fs.readFileSync(). | Použijte asynchronní operace se soubory, jako je fs.readFile. |
Použití operací vázaných na CPU, jako jsou náročné výpočty nebo dlouhotrvající smyčky. | Úlohy vázané na CPU přeneste na pracovní vlákna tak, že je rozdělíte na menší, neblokující části. |
Pomalé externí síťové požadavky kvůli používání HTTP požadavků na vzdálená API | Používejte asynchronní HTTP knihovny jako Axios nebo vestavěné moduly „http“ nebo „https“. |
Neoptimalizované databázové dotazy | Optimalizujte databázové dotazy pomocí nástrojů pro optimalizaci dotazů poskytovaných databází. |
Použití nekonečných smyček nebo těsných smyček bez přestávek. | Ujistěte se, že smyčky mají podmínky ukončení a neběží donekonečna. |
Závěr
Asynchronní řídicí tok využívá klíčová slova „ asynchronní/čekat ” upravovat nebo řídit tok provádění asynchronním způsobem. Zpětné volání pro požadovanou asynchronní metodu je abstrahováno a uloženo v samostatné funkci. Tato funkce je pak vyvolána pomocí klíčového slova wait sekvenčním způsobem spolu s dalšími požadovanými metodami. Tyto funkce jsou uloženy v jiné vlastní asynchronní funkci, která je pak vyvolána ke spuštění provádění. Tato příručka vysvětlila tok asynchronního řízení v Node.js.