JavaScripti generaatorid

Selles õpetuses saate näidete abil õppida JavaScripti generaatorite kohta.

JavaScriptis pakuvad generaatorid uut viisi funktsioonide ja iteraatoritega töötamiseks.

Generaatori abil

  • funktsiooni täitmise saate peatada kõikjal funktsiooni sees
  • ja jätkake koodi peatatud positsioonilt täitmist

Looge JavaScripti generaatorid

Generaatori loomiseks peate kõigepealt määratlema generaatori funktsiooni koos function*sümboliga. Generaatori funktsioonide objekte nimetatakse generaatoriteks.

 // define a generator function function* generator_function() (… ) // creating a generator const generator_obj = generator_function();

Märkus . Generaatori funktsiooni tähistatakse *. Nende loomiseks võite kasutada kas neid function* generatorFunc() (… )või function *generatorFunc()(… ).

Saagi kasutamine täitmise peatamiseks

Nagu eespool mainitud, saate peatada generaatori funktsiooni täitmise ilma kogu funktsiooni keha käivitamata. Selleks kasutame yieldmärksõna. Näiteks,

 // generator function function* generatorFunc() ( console.log("1. code before the first yield"); yield 100; console.log("2. code before the second yield"); yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next());

Väljund

 1. kood enne esimest tootlust (väärtus: 100, valmis: vale)

Siin,

  • Luuakse nimega generaatorobjekt generator.
  • Kui generator.next()kutsutakse, yieldkäivitatakse kood kuni esimeseni . Kui yieldsee tekib, tagastab programm väärtuse ja peatab generaatori funktsiooni.

Märkus . Muutujale peate enne selle kasutamist määrama generaatori objektid.

Mitme tootluse avalduse töötamine

yieldVäljend tagastab väärtuse. Kuid erinevalt returnavaldusest ei lõpe see programmi. Sellepärast saate jätkata koodi täitmist viimaselt saadud positsioonilt. Näiteks,

 function* generatorFunc() ( console.log("1. code before first yield"); yield 100; console.log("2. code before the second yield"); yield 200; console.log("3. code after the second yield"); ) const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next()); console.log(generator.next());

Väljund

 1. kood enne esimest tootlust (väärtus: 100, valmis: vale) 2. kood enne teist tulu (väärtus: 200, valmis: vale) (väärtus: määratlemata, tehtud: tõene)

See programm töötab nii.

  • Esimene generator.next()lause täidab koodi kuni esimese tootluslauseni ja peatab programmi täitmise.
  • Teine generator.next()käivitab programmi peatatud asendist.
  • Kõigi elementide juurde pääsemisel naaseb see (väärtus: määratlemata, tehtud: tõene).
Generaatori funktsiooni töötamine JavaScriptis

Argumentide edastamine generaatori funktsioonidele

Argumente saate edastada ka generaatori funktsioonile. Näiteks,

 // generator function function* generatorFunc() ( // returns 'hello' at first next() let x = yield 'hello'; // returns passed argument on the second next() console.log(x); console.log('some code'); // returns 5 on second next() yield 5; ) const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next(6)); console.log(generator.next());

Väljund

 (väärtus: "tere", valmis: vale) 6 mingi kood (väärtus: 5, tehtud: vale) (väärtus: määratlemata, tehtud: tõene)

Ülaltoodud programmis

  • Esimene generator.next()tagastab väärtuse yield(antud juhul 'tere'). Väärtust ei omistata muutujale xlet x = yield 'hello';
     (väärtus: "tere", tehtud: vale)
  • Kui generator.next(6)see kohtub, algab kood uuesti punktist let x = yield 'hello';ja argument 6 määratakse x-le. Samuti käivitatakse ülejäänud kood kuni sekundini yield.
     6 mõni kood (väärtus: 5, tehtud: vale)
  • Kui kolmas next()on täidetud, naaseb programm (väärtus: määratlemata, tehtud: tõene). Sellepärast, et muid tootlusaruandeid pole.
     (väärtus: määratlemata, tehtud: tõene)

Generaatoreid kasutatakse itterable'i rakendamiseks

Generaatorid pakuvad iteraatorite juurutamiseks lihtsamat viisi.

Kui soovite iteraatorit käsitsi rakendada, peate looma next()meetodiga iteraatori ja oleku salvestama. Näiteks,

 // creating iterable object const iterableObj = ( // iterator method (Symbol.iterator)() ( let step = 0; return ( next() ( step++; if (step === 1) ( return ( value: '1', done: false); ) else if (step === 2) ( return ( value: '2', done: false); ) else if (step === 3) ( return ( value: '3', done: false); ) return ( value: '', done: true ); ) ) ) ) for (const i of iterableObj) ( console.log(i); )

Väljund

 1 2 3

Kuna generaatorid on korduvad, saate iteraatorit hõlpsamalt rakendada. Siis saate for… oftsükli abil generaatorite kaudu itereerida . Näiteks,

 // generator function function* generatorFunc() ( yield 1; yield 2; yield 3; ) const obj = generatorFunc(); // iteration through generator for (let value of obj) ( console.log(value); )

Generaatori meetodid

Meetod Kirjeldus
next() Tagastab saagise väärtuse
return() Tagastab väärtuse ja lõpetab generaatori
throw() Viskab vea ja lõpetab generaatori

JavaScripti tagastamine Vs annab märksõna

tagastage märksõna saagis märksõna
Tagastab väärtuse ja lõpetab funktsiooni. Tagastab väärtuse ja peatab funktsiooni, kuid ei lõpe funktsiooni.
Saadaval nii tavaliste kui ka generaatorfunktsioonidena. Saadaval ainult generaatori funktsioonides.

JavaScripti generaatori funktsioon koos tagastusega

You can use the return statement in a generator function. The return statement returns a value and terminates the function (similar to regular functions). For example,

 // generator function function* generatorFunc() ( yield 100; return 123; console.log("2. some code before second yield"); yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next()); console.log(generator.next());

Output

 (value: 100, done: false) (value: 123, done: true) (value: undefined, done: true)

In the above program, when the return statement is encountered, it returns the value and done property becomes true, and the function terminates. Hence, the next() method after the return statement does not return anything.

Note: You can also use the return() method instead of the return statement like generator.return(123); in the above code.

JavaScript Generator Throw Method

Võite visata generaatori funktsioonile vea, kasutades meetodit thr (). Meetodi kasutamine throw()loob vea ja lõpetab funktsiooni. Näiteks,

 // generator function function* generatorFunc() ( yield 100; yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next()); // throws an error // terminates the generator console.log(generator.throw(new Error('Error occurred.'))); console.log(generator.next());

Väljund

 (väärtus: 1, valmis: vale) Viga: tekkis viga.

Generaatorite kasutamine

  • Generaatorid lasevad meil asünkroonsete ülesannete kirjutamise ajal kirjutada puhtama koodi.
  • Generaatorid pakuvad iteraatorite juurutamiseks lihtsamat viisi.
  • Generaatorid täidavad selle koodi ainult vajaduse korral.
  • Generaatorid on mälusäästlikud.

Generaatorid võeti kasutusele ES6-s . Mõni brauser ei pruugi generaatorite kasutamist toetada. Lisateabe saamiseks külastage JavaScripti generaatorite tugiteenust.

Huvitavad Artiklid...