初学者在JavaScript中的范围问题

时间:2016-02-03 09:47:19

标签: javascript express scope

我觉得这是一个非常基本的错误,但我花了几天时间阅读有关JavaScript范围的文章/书籍,回到这个问题,仍然没有真正达到任何清晰度,更不用说工作了解决方案 - 所以是时候把自己放在你的怜悯之上了。当然,我已经查看了其他问题/答案,但它们似乎指的是不同类型的范围问题,或者至少研究它们并没有让我更接近解决方案,所以我虽然冒险要求自己。

此函数应该采用文件名列表,然后遍历列表检索文件本身并将内容传递给另一个函数,该函数本身返回表示文件内容的j​​avascript对象。正如评论中所指出的,这个方法本身是有效的 - 当在循环中创建articles [i]时,articles [i] .body包含它应该的数据。但是,到循环结束时,不知何故,数组再次为空。有谁能告诉我我做错了什么?

    // Returns an array of processed article objects
    function processAllArticles(dirname, res) {
      fs.readdir(dirname, function(err, filenames) {
        if (err) {
          onError(err);
          return;
        }
        var articles = []; // I think this is in the wrong scope?
        // Array.foreach is 95% slower than a regular for loop apparently
        for (var i = 0, len = filenames.length; i < len; i++) {
          //console.log(filenames[i]); // This part seems to work
          var currentFilePath = dirname + '/' + filenames[i];
          //console.log("Trying to pass in " + currentFilePath);
          fs.readFile(currentFilePath, function(err, content) {
            articles[i] = processArticle(content)
            // The article object seems to exist in here
            // console.log(articles[i].body);
          });
          console.log("Articles array after iteration = " + articles); //Empty
          console.log("Articles["+ i + "] = " + articles[i]); // Undefined.
        } // end loop
        console.log("ready to render " + articles.length + " article objects.");
        // articles is empty at this point ugh so nothing is being rendered
        res.render('index', { articles: articles });
      });
    }

0 个答案:

没有答案