async.filter()的文档说迭代器回调不接受错误,显然"符合节点库与fs.exists
"等真值测试一起工作的方式。
我根本不理解这个解释。为什么它不能接受错误?如果我的异步真值测试涉及做某些可能导致错误的事情怎么办?
示例:我有一个路径名数组,可以是文件或目录的混合。我想过滤掉目录,因此我使用async.filter
和一个在其上调用fs.stat
的迭代器,然后调用done(stat.isFile());
。但是如果我的fs.stat
针对其中一条路径遇到ENOENT错误怎么办?该怎么办?
答案 0 :(得分:1)
async.filter()
方法与.some()
和.every()
方法一样,只是针对数组中的每个项目检查true
或false
。这些不是用于控制流来捕获错误,并且可能不意味着在每个步骤进行大量处理。 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.
}
} );