如何在forEach循环后显示成功消息?

时间:2014-07-11 17:11:16

标签: 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: '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循环完成且没有错误,我想显示一条成功消息:

console.log( chalk.green('Done, without errors.') );

但是我会把它放在哪里?什么是正确的方法?我可以将它放在文件的末尾,这不会在错误中找到,但这感觉不太正确..

2 个答案:

答案 0 :(得分:1)

在forEach开始之前保留一个计数器变量。在catch块之后,输入以下内容:每次迭代成功完成时,递减计数器。检查计数器是否为零 - 如果是,则控制台.log('成功')

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');
  }
});

答案 1 :(得分:0)

我认为将after放在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.') );