JavaScript

Generators

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.

References

  • Generator Function
  • Generator Object
  • Protocol Iterable
  • Protocol Iterator