• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

(javascript) - generatory i try...catch

Object Storage Arubacloud
0 głosów
174 wizyt
pytanie zadane 22 czerwca 2017 w JavaScript przez crova Użytkownik (940 p.)

Witam,

proszę o wyjaśnienie dlaczego w obu przypadkach konsola printuje mi 3 takie same obiekty, podczas gdy w drugim przypadku spodziewałbym się dwóch (bo są dwa wywołania metody next()).

żeby się nie powtarzać - góra kodu:

function *gen(end) {
  for (let i = 0; i< end; i++) {
    try {
      yield i;
    } catch (e) {
      console.log(e);
    }
  }
}

let it = gen(2);

pierwszy wariant wywołania:

console.log(it.next());
console.log(it.next());
//console.log(it.throw('Straszliwy bug lvl99'));
console.log(it.next());

drugi wariant wywołania:

console.log(it.next());
//console.log(it.next());
console.log(it.throw('Straszliwy bug lvl99'));
console.log(it.next());

Z góry dzięki za pomoc,

crova

1 odpowiedź

+1 głos
odpowiedź 22 czerwca 2017 przez Tomek Sochacki Ekspert (227,510 p.)

Ale co Ty chcesz w ogóle osiągnąć w tym kodzie???

Obiekt it nie ma metody throw. Wyjątki zgłasza się instrukcją, np. throw Error('msg') wewnątrz funkcji.

Generator pracuje prawidłowo, czyli wywołanie it = gen(2) uruchamia generator, pierwsze wywołanie zwraca obiekt z value=0, drugie z value=1 i później właściwość done=true i value=undefined. Pytanie po co w ogóle to try...catch w generatorze, bo to w zasadzie nic nie robi bo nie wystąpi tam wyjątek w tej pętli.

let it = gen(2);

console.log(it.next()); //Object {value: 0, done: false}
console.log(it.next()); //Object {value: 1, done: false}
console.log(it.next()); //Object {value: undefined, done: true}

 

Podobne pytania

+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 7 grudnia 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 1 czerwca 2016 w PHP przez kaminiak23 Użytkownik (640 p.)
+1 głos
1 odpowiedź 314 wizyt
pytanie zadane 5 maja 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)

92,572 zapytań

141,422 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...