在 RequestControl
类中实现 run
函数
在这一步中,你将在 RequestControl
类中实现 run
函数,以便根据发射结果自动安排下一批航天器的发射。
- 打开提供的项目中的
main.js
文件。
- 在
RequestControl
类中找到 run
函数。
- 在
run
函数内部,添加以下代码来处理航天器的发射:
run() {
// 获取请求队列的长度
let len = this.requestQueue.length;
// 如果请求队列为空,则返回
if (len === 0) return;
// 获取航天器最大数量和请求队列长度中的最小值
let min = Math.min(this.max, len);
// 逐个发射航天器
for (let i = 0; i < min; i++) {
// 可发射的航天器最大数量减一
this.max--;
// 从队列中获取下一个请求
let req = this.requestQueue.shift();
// 发射航天器并处理结果
req()
.then((res) => {
this.render(res);
})
.catch((error) => {
this.render(error);
})
.finally(() => {
// 可发射的航天器最大数量加一
this.max++;
// 递归调用 run 函数以发射下一批航天器
this.run();
});
}
}
实现的关键点如下:
- 获取请求队列的长度(
this.requestQueue.length
)。
- 如果请求队列为空,则返回。
- 获取航天器最大数量和请求队列长度中的最小值(
Math.min(this.max, len)
)。
- 逐个发射航天器,可发射的航天器最大数量减一(
this.max--
)。
- 使用
req()
返回的 Promise 的 then
和 catch
方法处理航天器发射的结果。
- 可发射的航天器最大数量加一(
this.max++
)并递归调用 run
函数以发射下一批航天器。