【问题标题】:async each and foreach functions异步每个和 foreach 函数
【发布时间】:2013-07-25 22:37:30
【问题描述】:

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

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

  2. 添加几个打印语句后,我意识到代码永远不会执行 pass http.get(url[a], newFileLoc, function (error, result){ 出于某种原因。总是有一个错误消息“异步.each(urls, 下载文件(urls, function(){ TypeError: Object # has no method 'each'"

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

请大家帮忙!!!

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

【问题讨论】:

  • 如果不将abc 传递给each,怎么会被调用?
  • 对不起,这是一个错误。已更正!
  • 所以你做了一个var async = require('async')
  • 如果您执行console.log(async),您会看到什么输出?
  • 是的,我已经在我的标题中包含了所有模块。

标签: javascript node.js foreach each


【解决方案1】:

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 中很常见)时,代码很难阅读。

【讨论】:

  • 代码 sn-p 显然是 node.js-only 所以console.log 不是问题。
猜你喜欢
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多