逃离二向箔

介绍

歌者文明的二向箔目前已经到达太阳系,二向箔的封装力场已经消失,接触到太阳系的三维空间后,导致三维立体空间塌陷,变成二维平面空间并不断扩展。倘若能借助曲率引擎等手段以光速先行逃离,那么摆脱二维化的命运依然是可能的。

目前人类已经开发出曲率飞船,停放飞船的港口一次性只能发送 10 辆飞船,并且飞船的启动时间为 3000ms 。下面由你来开发一个 RequestControl 类收集飞船的发射请求,依据飞船的结果自动安排下一批次的飞船发射,帮助人类逃离二向箔的打击。但是由于发射飞船的装置限制,一次最多发送的飞船有数量限制。

准备

本题已经内置了初始代码,打开实验环境,目录结构如下:

1
2
├── index.html
└── main.js

其中:

  • index.html 是主页面。
  • main.js 是待补充代码的 js 文件。

在 main.js 文件中:

  • createRequest 方法为发射飞船请求的 promise。
  • RequestControl 类的 addRequest 方法收集飞船发射请求。并将飞船发射请求放入 this.requestQueue 发射队列中。
  • run 方法实现依据发射结果自动排配下一批次的飞船发射。
  • render 用来在页面渲染每次飞船发射结果。

选中 index.html 右键启动 Web Server 服务(Open with Live Server),让项目运行起来。初始化无任何效果。

目标

找到 main.js 文件中的 run 函数,完成函数中的 TODO 部分。

  1. 传递给 RequestControl 的 max 参数是当前时刻的飞船最大发射数量。
  2. 飞船为逐个发射,发射后返回 promise 结果。每个飞船发射后会空出一个发射位置,下一个飞船就在这个发射位置发射。
  3. 通过 render 函数将发射的结果渲染到页面,render 函数的参数为飞船发射 promise 返回的结果。

以 max =2 为例,飞船发射流程如下图:

图片描述

完成后,最终页面效果如下:

图片描述

规定

  • 请勿修改已经提供的代码,以免造成判题无法通过。
  • 请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径等。

判分标准

  • 本题完全实现题目目标得满分,否则得 0 分。

总通过次数: 503 | 总提交次数: 581 | 通过率: 86.6%

难度: 困难 标签: 2022, 省模拟赛, Web 前端, ES6

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
run() {
// TODO:待补充代码
let len = this.requestQueue.length;
// requestQueue是promise数组,实际意义是等待发射的飞船
console.log(this.requestQueue);
// 如果len为0了,就不射了
if (len === 0) {
return;
}
// 下面是执行一次的,那么我们直到那什么,一直执行
// 然后不能只同时执行一次:
console.log(this.max);
let min = Math.min(this.max, len)
for (let i = 0; i < min; i++) {
this.max--
let req = this.requestQueue.shift();
console.log(req);
// req是一个promiseFn
// req执行一下,然后.then得到他的res,
req()
.then((res) => {
console.log(res);
this.render(res);
})
.catch((err) => {
console.log(err);
this.render(err);
})
.finally(() => {
this.max++
this.run();
});
}
}