Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript async.each与async.each之间的差异?_Javascript_Node.js_Express_Async.js - Fatal编程技术网

Javascript async.each与async.each之间的差异?

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.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。 注意:回调不会将错误作为第一个参数

范例

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