美好的一天。
今天我正在处理这个复杂的脚本,它通过服务器端渲染向站点发出请求,获取 HTML,中断并获取一些数据。该脚本有 4 个阶段:phaseOne、phaseTwo、phaseThree 和 phaseFour。
哪些阶段有类似的界面:
class PhaseOne {
constructor(MAP) {
this.MAP = MAP || MAP;
}
// All code related with the phase here.
process() {}
}
所以我在所有阶段都在处理这个 MAP 对象,并且我正在调用堆栈中的每个阶段,如下所示:
let phases = require('./phases');
[
// 'Initial',
'PhaseOne',
'PhaseTwo',
'PhaseThree',
'PhaseFour',
].reduce((m, fn) => {
return new phases[fn](m).process();
}, MAP);
一切正常。我的问题是:有些阶段真的很慢..所有程序都需要 30 分钟才能完成..我想在我的终端中查看每个阶段的百分比。
喜欢:
PhaseOne: 10%
PhaseOne: 11%
PhaseOne: 12%
但我没有任何想法,我找不到一个好的教程来做到这一点..
目前在我的流程函数中,我有 for 循环、if 语句……一般来说,我使用的是命令式风格……
PhaseOne 的一个例子:
// In this phase we need the property string in MAP.aguia01 to
// assign the first context and extract the data with regex.
if (typeof this.MAP.aguia01.string === 'undefined') {
cli.fatal(
'MAP doesn\'t have the necessary properties to run in Aguia01 phase. Exiting...'
);
}
for (let month of months) {
this.MAP.aguia01.string += requests.aguia01.apply(this, [month]);
}
for (let info of patterns.aguia01.infos) {
this.MAP.aguia01.infos[info.name] = (
this.MAP.aguia01.string.match(info.pattern)
)[1];
}
for (let line of patterns.aguia01.lines) {
this.MAP.aguia01.lines[line.name] = (
this.MAP.aguia01.string.match(line.pattern)
)[1];
}
所以.. 有可能用命令式风格做我想做的事吗?
谢谢。