我是lodash和Javascript的新手。我正在使用nodejs。 我正在使用lodash过滤器函数来过滤我的集合中的一些内容。
这是片段
filteredrows = _.filter(rows, function(row, index){
//here I need to call some asynchronous function which checks the row
//the return value of this asynchronous function will determine whether to return true or false for the filter function.
});
我的问题是,我该怎么做?使用封闭?是否可以在lodash过滤器功能中执行此操作? 提前谢谢。
答案 0 :(得分:3)
lodash可能不是这项工作的最佳工具。我建议您使用async
。
https://github.com/caolan/async#filter
示例:fs.exists
是一个异步函数,它检查文件是否存在然后调用回调。
async.filter(['file1','file2','file3'], fs.exists, function(results){
// results now equals an array of the existing files
});
答案 1 :(得分:0)
Lodash不是异步工具。它可以快速实时过滤信息。当您需要使进程异步时,必须使用bluebird,Async,本机承诺或回调。
我认为您应该使用Lodash和Underscore,只能实时组织Objectdata。
答案 2 :(得分:0)
如果要使用lodash而不是安装新的库(async
)来完成此操作,则可以执行以下操作:
const rowFilterPredicate = async (row, index) => {
// here I need to call some asynchronous function which checks the row
// the return value of this asynchronous function will determine whether to return true or false for the filter function.
}
// First use Promise.all to get the resolved result of your predicate
const filterPredicateResults = await Promise.all(_.map(rows, rowFilterPredicate));
filteredrows = _.chain(rows)
.zip(filterPredicateResults) // match those predicate results to the rows
.filter(1) // filter based on the predicate results
.map(0) // map to just the row values
.value(); // get the result of the chain (filtered array of rows)