async each和foreach函数

时间:2013-07-25 20:27:22

标签: javascript node.js foreach each

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

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

  2. 在添加了几个打印语句之后,我意识到代码永远不会执行传递http.get(url [a],newFileLoc,函数(错误,结果){由于某种原因。总是有错误消息“async .each(urls,downloadFile(urls,function(){ TypeError:Object#没有方法'each'“

  3. 所以我想我真正的问题是,代码究竟出了什么问题?我试图使用forEach而不是每个,但还有另一个错误“iterator(x,function(err){ TypeError:undefined不是函数“。

  4. 有人请帮忙!!!

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

1 个答案:

答案 0 :(得分:0)

each的签名是each(arr, iterator, callback),但在iterator地方,您直接调用abc并且它不会返回功能。

该问题的解决方法导致:

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

另请注意,尝试调用console.log会导致IE9及其崩溃。

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