gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:32 25 4
gpt4 key购买 nike

async.filter() 的文档说迭​​代器回调不接受错误,显然“符合 Node 库处理 fs.exists 等真值测试的方式”。

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

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

最佳答案

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

关于node.js - 为什么 async.filter() 不接受错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com