为什么async.filter()不接受错误?

时间:2014-07-30 16:54:36

标签: node.js asynchronous

async.filter()的文档说迭代器回调不接受错误,显然"符合节点库与fs.exists"等真值测试一起工作的方式。

我根本不理解这个解释。为什么它不能接受错误?如果我的异步真值测试涉及做某些可能导致错误的事情怎么办?

示例:我有一个路径名数组,可以是文件或目录的混合。我想过滤掉目录,因此我使用async.filter和一个在其上调用fs.stat的迭代器,然后调用done(stat.isFile());。但是如果我的fs.stat针对其中一条路径遇到ENOENT错误怎么办?该怎么办?

1 个答案:

答案 0 :(得分:1)

async.filter()方法与.some().every()方法一样,只是针对数组中的每个项目检查truefalse。这些不是用于控制流来捕获错误,并且可能不意味着在每个步骤进行大量处理。 async的作者会将此归结为您,如果您的某个支票引发错误,则可以将其解释为false

如果您要求每个路径名有效,则可以选择.each()

var filteredArray = [];
async.each( paths, function( path, eachCb ){
  //some asynchronous check you define
  checkpath( path, function( err ) {
    if( err ) return eachCb( err );
    filteredArray.push( path );
    eachCb( null );
  } );
}, function( eachErr ) {
    if( eachErr ) {
      console.log( "Not all paths were correct. " + eachErr.message );
      //other stuff here, perhaps a callback with this error message
    }
    else {
      //success!
      //filteredArray now filled with only valid paths, and only get here if no errors.
    }
} );