Introdução
Neste projeto, você aprenderá como desenvolver uma classe RequestControl que coleta solicitações de lançamento de espaçonaves e organiza automaticamente o lançamento do próximo lote de espaçonaves com base nos resultados das espaçonaves. Isso ajudará os humanos a escapar do impacto da "Dual Vector Foil" do problema dos três corpos, que colapsa o espaço tridimensional em um plano bidimensional.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como implementar a função
runna classeRequestControlpara lidar com o lançamento de espaçonaves. - Como renderizar os resultados do lançamento na página usando a função
render.
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Usar promises (promessas) para simular o processo de lançamento de espaçonaves.
- Gerenciar a fila de lançamento e controlar o número de espaçonaves que podem ser lançadas de cada vez.
- Atualizar a interface do usuário para exibir os resultados do lançamento.
Configurar a Estrutura do Projeto
Nesta etapa, você configurará os arquivos e a estrutura do projeto. Siga as etapas abaixo para concluir esta etapa:
Abra a pasta do projeto. A estrutura do diretório é a seguinte:
├── index.html
└── main.js
Dentre eles:
index.htmlé a página principal.main.jsé o arquivo js onde o código precisa ser complementado.
No arquivo main.js:
- O método
createRequesté umapromise(promessa) para solicitar o lançamento de uma espaçonave. - O método
addRequestda classeRequestControlcoleta solicitações de lançamento de espaçonaves. A solicitação de lançamento da espaçonave é colocada na fila de lançamentothis.requestQueue. - O método
runorganiza automaticamente o lançamento do próximo lote de espaçonaves com base nos resultados do lançamento. - O método
renderé usado para renderizar os resultados do lançamento na página.
Tomando max = 2 como exemplo, o processo de lançamento da espaçonave é o seguinte:

Clique no botão Go Live no canto inferior direito da WebIDE para executar o projeto. Inicialmente, não tem efeito.
Implementar a Função run na Classe RequestControl
Nesta etapa, você implementará a função run na classe RequestControl para organizar automaticamente o lançamento do próximo lote de espaçonaves com base nos resultados do lançamento.
- Abra o arquivo
main.jsno projeto fornecido. - Localize a função
runna classeRequestControl. - Dentro da função
run, adicione o seguinte código para lidar com o lançamento das espaçonaves:
run() {
// Get the length of the request queue
let len = this.requestQueue.length;
// If the request queue is empty, return
if (len === 0) return;
// Get the minimum of the max number of spacecraft and the length of the request queue
let min = Math.min(this.max, len);
// Launch the spacecraft one by one
for (let i = 0; i < min; i++) {
// Decrement the max number of spacecraft that can be launched
this.max--;
// Get the next request from the queue
let req = this.requestQueue.shift();
// Launch the spacecraft and handle the result
req()
.then((res) => {
this.render(res);
})
.catch((error) => {
this.render(error);
})
.finally(() => {
// Increment the max number of spacecraft that can be launched
this.max++;
// Recursively call the run function to launch the next batch of spacecraft
this.run();
});
}
}
Os pontos-chave da implementação são:
- Obter o comprimento da fila de solicitações (
this.requestQueue.length). - Se a fila de solicitações estiver vazia, retornar.
- Obter o mínimo do número máximo de espaçonaves e o comprimento da fila de solicitações (
Math.min(this.max, len)). - Lançar as espaçonaves uma por uma, decrementando o número máximo de espaçonaves que podem ser lançadas (
this.max--). - Lidar com o resultado do lançamento da espaçonave usando os métodos
thenecatchda promise retornada porreq(). - Incrementar o número máximo de espaçonaves que podem ser lançadas (
this.max++) e chamar recursivamente a funçãorunpara lançar o próximo lote de espaçonaves.
Testar o Projeto
- Salve o arquivo
main.js. - Atualize a página web no seu navegador.
- Observe os resultados do lançamento exibidos na página. A página deve mostrar os lançamentos bem-sucedidos e falhos das espaçonaves.
O efeito final da página é o seguinte:

Parabéns! Você concluiu a implementação da classe RequestControl para organizar automaticamente o lançamento de espaçonaves. O projeto agora deve estar totalmente funcional.
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



