Javascript async.each与async.each之间的差异?
async.js中async.each与async.each的区别? 除了async.every返回结果之外,这两个函数似乎是相同的。 纠正我的错误。每个(arr、迭代器、[回调]) 将函数迭代器并行应用于arr中的每个项。使用列表中的一项调用迭代器,并在迭代器完成时进行回调。如果迭代器将错误传递给其回调函数,则会立即调用主回调函数(针对每个函数) 请注意,由于此函数将迭代器并行应用于每个项,因此不能保证迭代器函数将按顺序完成 论据 arr—要迭代的数组。 迭代器(item,callback)-应用于arr中每个项的函数。迭代器被传递一个回调(err),一旦完成,必须调用该回调。如果没有发生错误,则应在没有参数或显式空参数的情况下运行回调。数组索引不会传递给迭代器。如果需要索引,请使用forEachOf。 回调(err)-可选的回调,在所有迭代器函数完成或发生错误时调用。 例子 every(arr、迭代器、[回调]) 别名:全部 如果arr中的每个元素都满足异步测试,则返回true。每个迭代器调用的回调只接受单个参数true或false;它首先不接受错误参数!这与节点库处理像fs.exists这样的真值测试的方式一致 论据 arr—要迭代的数组。 迭代器(item,callback)-并行应用于数组中每个项的真值测试。迭代器被传递一个回调(truthValue),完成后必须使用布尔参数调用该回调。 callback(result)-可选的回调函数,在任何迭代器返回false时或在所有迭代器函数完成后立即调用。根据异步测试的值,结果将为true或false。 注意:回调不会将错误作为第一个参数 范例Javascript async.each与async.each之间的差异?,javascript,node.js,express,async.js,Javascript,Node.js,Express,Async.js,async.js中async.each与async.each的区别? 除了async.every返回结果之外,这两个函数似乎是相同的。 纠正我的错误。每个(arr、迭代器、[回调]) 将函数迭代器并行应用于arr中的每个项。使用列表中的一项调用迭代器,并在迭代器完成时进行回调。如果迭代器将错误传递给其回调函数,则会立即调用主回调函数(针对每个函数) 请注意,由于此函数将迭代器并行应用于每个项,因此不能保证迭代器函数将按顺序完成 论据 arr—要迭代的数组。 迭代器(item,callback)-
async.every(['file1','file2','file3'], fs.exists, function(result){
// if result is true then every file exists
});
异步每个
.each(coll, iteratee, callback)
它更像是每个方法的数组。这里,在每个Iterable(coll)元素上,将执行函数iteratee
。这将是平行的。以网站为例
async.each(openFiles, saveFile, function(err){
// if any of the saves produced an error, err would equal that error
});
这里假设openFiles
是文件路径数组。因此,将对每个文件调用saveFile
。这一进程将是并行的。因此,执行顺序无法得到保证。这里将通过saveFile
对openFiles
数组执行一些操作。如果任何元素导致saveFile中出现错误,该函数将调用带有错误的邮件回调并停止该过程
异步每
.every(coll, iteratee, callback)
这似乎是同样的方法。因为它还对coll
元素执行iteratee
方法。但这里的关键是,它将返回true
或false
。它更像一个过滤器,但唯一的区别是,如果coll
中的任何元素在iteratee方法中失败,它将返回false
。不要把这里和错误混淆。如果在执行过程中出现一些不确定的行为,将导致错误。因此,callback
in方法将返回callback(err,result)
。根据coll
是否通过iteratee测试,结果将为真或假
对于eg,检查数组是否有偶数
async.every([4,2,8,16,19,20,44], function(number, callback) {
if(number%2 == 0){
callback(null, true);
}else{
callback(null, false);
}
}, function(err, result) {
// if result is true when all numbers are even else false
});
所以它更像是在一个iterable实体中测试一组值。如果他们通过了给定的测试。另一个例子是检查给定的数字是否为素数。除了真或假之外,我们还可以返回其他值吗?@RaviTeja No,该方法的唯一目的是过滤并返回布尔值。我使用过这种方法,在最终回调中,除了布尔值之外,您永远无法获得其他值。请阅读文档:
async.every([4,2,8,16,19,20,44], function(number, callback) {
if(number%2 == 0){
callback(null, true);
}else{
callback(null, false);
}
}, function(err, result) {
// if result is true when all numbers are even else false
});