Wykonywanie kodu generatora

0
function * exampleGenerator() {
  const first = yield 'pierwszy';
  console.log("First: ", first)
  const second = yield 'drugi';
  console.log("Second: ", second)
}

const generator = exampleGenerator();

const a = generator.next()
const b = generator.next('one')
const c = generator.next('two')

console.log("A: ", a)
console.log("B: ", b)
console.log("C: ", c)

Czemu console.log("B: ", b) zwraca obiekt z polami value o wartości 'drugi' oraz done o wartości false, a nie wyświetla samej wartości 'two'? W przykładzie poniżej linijka generator.next("two") wyświetla stringa "two":

function * exampleGenerator() {
  const first = yield 'pierwszy';
  console.log("First: ", first)
  const second = yield 'drugi';
  console.log("Second: ", second)
}

const generator = exampleGenerator();

generator.next()
generator.next('one')
generator.next('two')

0

[...] a nie wyświetla samej wartości 'two'

Wyświetla, tylko wyświetlenie następuje w momencie uruchomienia generator.next('one'), które przecież następuje przed Twoim console.log("B: ", ...)

0

@sajek587: Zadajesz ostatnio bardzo dużo prostych pytań. Zanim jakieś zadasz chociaż spróbuj znaleźć odpowiedź w internecie, albo zrozumieć temat.

0

@Patryk27: A czy podczas wypisywania tej linijki:

console.log("B: ", b)

nie powinno jako value w obiekcie wypisać wartości 'one' albo 'two' skoro w next zostały przekazane takie argmuenty?

2

Jako value przekazane jest to, co znajduje się po operatorze yield - czyli w Twoim przypadku powinieneś tam mieć raz value: "pierwszy" oraz raz value: "drugi":

function * exampleGenerator() {
  const first = yield 'pierwszy'; // zwraca z generatora `value: "pierwszy"`, do `first` przypisane zostaje `one`
  console.log("First: ", first)
  const second = yield 'drugi'; // zwraca z generatora `value: "drugi"`, do `second` przypisane zostaje `two`
  console.log("Second: ", second)
}

const generator = exampleGenerator();

const a = generator.next()
const b = generator.next('one')
const c = generator.next('two')

console.log("A: ", a)
console.log("B: ", b)
console.log("C: ", c)

1 użytkowników online, w tym zalogowanych: 0, gości: 1