Pré-Requisitos
Symbol e Iterators
Generator Function
Função que retorna um Generator Object.
A declaração da função é realizada com a palavra chave "function" seguida de um asterisco (*)
Generator Object
Pode ser iterado conforme iterable protocol e o iterator protocol.
É Iterable porque possui a propriedade Symbol.iterator
Método next() para realizar a iteração.
Método next()
Retorna um objeto com as propriedades done e value (done = true se o objeto estiver completo, false se houver mais itens) para controlar a iteração.
Cada next() é uma iteração até a próxima pausa (yield).
Se não houver mais pausas, a função é finalizada.
É possível passar um value como argumento para a próxima pausa (yield). De fora para dentro da função.
Usabilidade
Funções que pausam, despausam e retornam valores através da interface de iteração Symbol.iterator do Generator Object.
A própria Generator Function pode ser usada como um iterator.
yield
Palavra reservada que retorna um valor e pausa a execução do Generator Function.
Definir um VALUE para cada pausa (yield) é opcional.
Para adicionar um value, basta passar o value como argumento (digitar value no lado direito). Padrão é undefined.
Quando pausada, função fica suspensa até que seja chamada através do next()
Casos de Uso
- Libraries, principalmente para lidar com coisas assíncronas (Muito usado em React.js)
A função envia uma promise para fora.
A library resolve e retorna o valor.
Generator Function
Generator Object
Protocol Iterable
Protocol Iterator