为什么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()
方法一样,只是针对数组中的每个项目检查true
或false
。 这些并不意味着控制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. } } );
- Typescriptasynchronous生成器,用于套接字
- hibernate/等待,直到进程在asynchronous循环过程中完成
- 对于在NodeJS中遍历数组的循环,但console.log不会打印到terminal?
- 如何在callback之前设置variables?
- 在下面的控制stream中使用响应之前,如何等待节点/快速应用程序中mongo findOne查询的响应
- Nodejs SQL连接和asynchronous模块
- Node.js / express:立即响应客户端请求并在nextTick中继续执行任务
- 在承诺fs.writeFile,asynchronous同步的东西
- 为什么不能stream行的JavaScript运行时处理同步的asynchronous脚本?