export { future as theme } from 'mdx-deck/themes'
import { Split } from 'mdx-deck/layouts'
import { Appear, Notes } from 'mdx-deck'
import { CodeSurfer } from 'mdx-deck-code-surfer'
Na mesma thread que seu código javascript roda, tem muito mais coisa acontecendo
- Painting
- Atualização de styles da página
- Manipulação de interação do usuário
- (Meu código)
A execução do nosso código fica o tempo todo em concorrência com processos do próprio navegador.
Interações como seleção de texto, ou interações com form controls, etc, rodam tudo na mesma thread.
Antes de um método ser executado ele entra numa fila, e só será executado quando chegar sua vez na fila.
O browser fica infinitamente atualizando a fila com novas mensagens. Esse processo se chama event loop,
No conceito de event loop, métodos são frequentemente chamados de mensagens (messages).
Com esse modelo de concorrência, fica impossível a execução de código assíncrono
Por que toda mensagem tem que esperar a próxima pra iniciar a execução
<CodeSurfer title="Exemplo" code={require("raw-loader!./snippets/promises/promise.jsx")} />
<CodeSurfer title="Promise.all" code={require("raw-loader!./snippets/promises/promiseAll.jsx")} />
<CodeSurfer title="Promise.race" code={require("raw-loader!./snippets/promises/promiseRace.jsx")} />
- Promise.reject(reason)
- Promise.resolve(reason)
Retorna uma promise já resolved ou rejected
<CodeSurfer title="Under the hood" code={require("raw-loader!./snippets/promises/hardcodedpromise.jsx")} steps={[ { lines: [1] }, { range: [2, 4], notes: "Flags" }, { range: [6, 14], notes: "Métodos que atualizam as flags" }, { range: [16, 34], notes: "Método que fica continuamente checando o estado da Promise" }, { range: [18, 26] }, { range: [26, 30] }, { range: [30, 32] }, { range: [36, 57], notes: "Retorno" }, { lines: [37], notes: "Executando callback que foi passada" }, { range: [40, 50], notes: "Retornando handler de sucesso com nova Promise"}, { range: [52, 55], notes: "Retornando handler de erro" } ]} />
<CodeSurfer title="Quiz" code={require("raw-loader!./snippets/promises/quiz.jsx")} />
Resposta:
1, 2, p1, p2