[sign in]

What's a Closure?

  1. O que é Closure?
  2. Variáveis e valores
  3. Definindo funções
  4. Efeitos paralelos
  5. Funções são valores
  6. Retornando funções
  7. Escopo da função
  8. Funções aninhadas
  9. Cada Closures com seu estado
  10. Dados Privados
  11. Callbacks assíncronos
  12. Passando uma continuação

Callbacks assíncronos

As vezes as funções podem demorar muito para retornar. Por exemplo, se você chama uma função leia(arquivo), a função pode ter de parar e esperar o disco girar e procurar no lugar certo antes da informção estar pronta para ser usada. Se o arquivo estiver em um outro servidor na nuvem, a função terá de esperar a resposta do outro servidor.

Isso pode ser um problema, Por exemplo, no navegador você não quer que a interface fique congelada para o usuário enquanto você procura uma rota no Google Mapas. No servidor, você não quer que uma requisição que raramente é usada segure todas as outras requisições.

Felizmente isso tem solução. No modelo assíncrono a função readAsync aceita um arquivo e um callback como parâmetro. A função retorna imediatamente antes da leitura do arquivo e agenda a leitura pra um momento futuro. Uma vez que os dados estão prontos, a função callback é chamada.

E o que é um callback? É um closure Nós veremos como usar funções assíncronas; implementá-los é outra história.

Aqui temos um exemplo de como usar uma função de bloqueio regular read para pegar o conteúdo de um arquivo.

Aqui temos o mesmo exemplo usando uma função assíncrona readAsync.

Algumas chamadas readFileAsync. Dentro do readFileAsync, readAsync é chamado com o callback func. Uma vez que os dados estãoprontos, readAsync chama func com os dados. Então func chama doSomething com os dados atualizados. Isso pode acontecer antes, durante ou depois da execução de doMoreStuff().

Escrever programas que usam callbacks assíncronos pode ser um pouco as avessas. Isso pode ajudar a usar funções anonimas. Aqui temos um exemplo com uma função anônima.

Aqui temos um exemplo que usa funções assíncronas writeAsync(file, contents, callback). Neste caso o callback não recebe nenhum argumento, ele só é chamado quando a escrita termina.

Porque doMoreStuff está no callback, nós sabemos que ele só será chamado quando a escrita terminar.

Defina uma função chamada doStuffAsync que recebe um argumento callback. Sua função deve ler o conteúdo do arquivo "passwords", escrever o resultado no arquivo "world.txt" com o texto "OWNED" concatenado no final, então chame o callback sem argumentos. Use o readAsync assíncrono e o writeAsync assíncrono.

1:1

about news main