Javascript 如何在此forEach循环之后显示成功消息?
在这个脚本中,我正在检查css文件列表中的语法错误:Javascript 如何在此forEach循环之后显示成功消息?,javascript,node.js,Javascript,Node.js,在这个脚本中,我正在检查css文件列表中的语法错误: 'use strict'; var fs = require('fs'); var chalk = require('chalk'); var rework = require('rework'); var expand = require ('glob-expand'); var conformance = require('rework-suit-conformance'); var files = expand({ filter
'use strict';
var fs = require('fs');
var chalk = require('chalk');
var rework = require('rework');
var expand = require ('glob-expand');
var conformance = require('rework-suit-conformance');
var files = expand({
filter: 'isFile',
cwd: 'build/'
}, ['**/*.css']);
files.forEach(function (file) {
var css = fs.readFileSync('build/' + file, 'utf-8');
try {
rework(css).use(conformance);
}
catch (e) {
console.log( chalk.red('Error in: ' + 'build/' + file) );
console.log( chalk.red(e) );
process.exit(1);
}
});
如果foreach循环完成时没有错误,我想显示一条success消息:
console.log( chalk.green('Done, without errors.') );
但是我该把它放在哪里呢?正确的方法是什么?我可以把它放在文件的末尾,如果出现错误,就无法到达,但这感觉不太正确。我认为将它放在
forEach
之后是安全的。此外,如果有错误,它将在forEach
完成之前退出。如果forEach的完成了,可以肯定地说一切都进行得很顺利
files.forEach(function (file) {
var css = fs.readFileSync('build/' + file, 'utf-8');
try {
rework(css).use(conformance);
}
catch (e) {
console.log( chalk.red('Error in: ' + 'build/' + file) );
console.log( chalk.red(e) );
// If any error happened, this should kill everything before proceeding
process.exit(1);
}
});
// If all went well, it should reach this code.
console.log( chalk.green('Done, without errors.') );
在forEach开始之前保留一个计数器变量。在catch块之后,放入以下内容:每次迭代成功完成时,递减计数器。检查计数器是否为零-如果是,则检查console.log('Success')
记录每个成功迭代的次数。如果该计数器===files.length,则执行某些操作。这是真的。那么这样做没有真正的负面影响?不将它封装在函数、回调或其他东西中感觉有点不对劲。@Sam嗯,听起来太简单了(simple有很多地方出错)。但是是的,如果应用程序在发生错误时被“杀死”,那么它绝对不可能到达forEach
的末尾。如果是,则不会发生错误。因此,我们可以有把握地说,这是一次成功。
var fc = files.length;
files.forEach(function (file) {
var css = fs.readFileSync('build/' + file, 'utf-8');
try {
rework(css).use(conformance);
}
catch (e) {
console.log( chalk.red('Error in: ' + 'build/' + file) );
console.log( chalk.red(e) );
process.exit(1);
}
fc -= 1;
if (fc === 0) {
console.log('Success');
}
});