async.js 中的async.each与async.every之间的区别? 似乎两者都是相同的,只是async.every返回结果。 纠正我,我错了。
答案 0 :(得分:2)
将函数迭代器并行应用于arr中的每个项目。使用列表中的项目调用迭代器,并在完成时调用它。如果迭代器将错误传递给它的回调,则会立即调用主回调(对于每个函数)并显示错误。
注意,由于此函数并行地将迭代器应用于每个项目,因此无法保证迭代器函数将按顺序完成。
参数
arr - 要迭代的数组。 iterator(item,callback) - 一个应用于arr中每个项目的函数。迭代器传递一个回调(err),一旦完成就必须调用它。如果没有发生错误,则应该在没有参数或显式null参数的情况下运行回调。数组索引不会传递给迭代器。如果需要索引,请使用forEachOf。 callback(err) - 可选当所有迭代器函数完成或发生错误时调用的回调函数。 实例
// assuming openFiles is an array of file names and saveFile is a function
// to save the modified contents of that file:
async.each(openFiles, saveFile, function(err){
// if any of the saves produced an error, err would equal that error
});
// assuming openFiles is an array of file names
async.each(openFiles, function(file, callback) {
// Perform operation on file here.
console.log('Processing file ' + file);
if( file.length > 32 ) {
console.log('This file name is too long');
callback('File name too long');
} else {
// Do work to process file here
console.log('File processed');
callback();
}
}, function(err){
// if any of the file processing produced an error, err would equal that error
if( err ) {
// One of the iterations produced an error.
// All processing will now stop.
console.log('A file failed to process');
} else {
console.log('All files have been processed successfully');
}
});
别名:全部
如果arr中的每个元素都满足异步测试,则返回true。每个迭代器调用的回调只接受一个true或false的参数;它首先不接受错误参数!这与节点库使用fs.exists等真值测试的方式一致。
参数
arr - 要迭代的数组。 iterator(item,callback) - 一个真实测试,用于并行应用于数组中的每个项目。迭代器传递一个回调(truthValue),一旦完成,必须用boolean参数调用它。 callback(result) - 可选一个回调函数,只要任何迭代器返回false,或者所有迭代器函数完成后立即调用。结果将为true或false,具体取决于异步测试的值。 注意:回调不会将错误作为第一个参数。
实施例
async.every(['file1','file2','file3'], fs.exists, function(result){
// if result is true then every file exists
});
答案 1 :(得分:2)
异步每个
.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
。这个过程将是并行的。因此无法保证执行顺序。这里将openFiles
对saveFile
数组进行一些操作。如果任何元素导致saveFile中的错误,该函数将调用带有错误的邮件回调并停止该过程。
每次异步
.every(coll, iteratee, callback)
这看起来像是同样的方法。因为它还在iteratee
元素上执行coll
方法。但关键是,它会返回true
或false
。它更像是一个过滤器,但唯一不同的是,如果false
中的任何元素在iteratee方法中失败,它将返回coll
。不要在这里混淆错误。如果执行时发生某些不确定的行为,将导致错误。因此方法中的callback
将返回callback(err, result)
。结果将为真或假,具体取决于coll
是否通过了iteratee测试。
例如检查数组是否有偶数;
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
});
因此更像是在可迭代实体中测试值集。如果他们通过了给定的测试。另一个例子可能是检查给定的数字是否为素数。