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

async.filter()的文档说,迭代器callback不接受一个错误,显然“符合节点库的工作方式与像fs.exists真相testing”。

我完全不理解这个解释。 为什么不能接受错误? 如果我的asynchronous真相testing涉及到某些可能导致错误的事情,有时呢?

例如:我有一个可能是文件或目录混合的path名称数组。 我想过滤掉目录,所以我使用async.filter和一个调用fs.stat的迭代器,然后调用done(stat.isFile()); 。 但是,如果我的fs.stat遇到ENOENT错误的path之一呢? 我该怎么处理这个错误?

async.filter()方法就像.some().every()方法一样,只是针对数组中的每个项目检查truefalse 。 这些并不意味着控制stream来捕捉错误,并不意味着每一步都需要大量的处理。 async的作者离开了你,虽然,如果你的一个检查引发错误,这可能被解释为一个false

如果你需要每个path名都是有效的,你可以select.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. } } );