javascript - 异步每个和 foreach 函数

标签 javascript node.js foreach each

我正在尝试使用 async 的 each 函数来调用 abc 函数,但我遇到了几个问题。代码如下。

  1. 我之所以在这里使用for循环是因为当我尝试使用每个函数时,传递给abc函数的url的url是数组形式而不是字符串形式。所以我想知道是否有任何其他方法可以在不必添加 for 循环的情况下清除它。

  2. 添加几个打印语句后,我意识到代码永远不会执行 pass http.get(url[a], newFileLoc, function (error, result){ 出于某种原因。总是出现错误消息“async .each(urls, downloadFile(urls, function(){ 类型错误:对象 # 没有方法 'each'"

  3. 所以我想我真正的问题是,代码到底有什么问题?我尝试使用 forEach 而不是 each,但仍然出现另一个错误“iterator(x, function (err) { TypeError: undefined 不是函数”。

有人请帮忙!!!

var abc = function ( url, cb ) {
  for (var a = 0; a < url.length; a++){
    var index = url[a].lastIndexOf("/") + 1;
    var filename = url[a].substr(index);
    var newFileLoc = "./tmp/" + filename;
    http.get(url[a], newFileLoc, function (error, result) {
      if (error) {
        console.error(error);
      } else {
        cb();
      }
    });
  }
}
var urls = ["www.randomurl.random.random/", "www.randomurl.random.random/"];

async.each(urls, abc(urls, function(){
  console.log('downloaded' + results);
}), function(err){       
  if(err){
    console.log(err);
  }
});

最佳答案

each的签名是each(arr, iterator, callback),但是在iterator的地方,你调用的是 abc 直接,它不返回函数。

该问题的修复导致:

async.each(
    urls,
    abc,
    function(err) {
        if(err){
            console.log(err);
        };
    }
);

另请注意,尝试调用 console.log 会导致 IE9 及更高版本使您的脚本崩溃。

...清理缩进。当左大括号和右大括号不遵循 The One True Brace 样式(这是 JavaScript 的常见样式)时,代码很难阅读。

关于javascript - 异步每个和 foreach 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17868126/

相关文章:

Node.js 路径错误

javascript - JQM简单对话框: how to prompt for a number?

javascript - 为什么在此示例中处理我的字符串时会得到额外的 ', '?

javascript - 手动将函数插入 Javascript/Nodejs 事件队列?

javascript - 从键/值对创建复杂对象

php - MYSQL从数据库检索数据时如何忽略foreach循环中的重复行

javascript - 在每个循环中获取相对值 jQuery

PHP - 在 foreach 循环中取消设置数组元素

javascript - 我可以使用 JavaScript .value 属性将数据从一个 div 复制到另一个 div 吗?

javascript - 使用 jquery 变量替换点、冒号或任何其他字符的通用正则表达式