为什么不能将对象返回到Javascript Array.map()并正确映射?

时间:2013-06-19 00:45:45

标签: javascript arrays json node.js map

下面我有两个函数(它们是从一个更大的脚本中取出来的,所以假设所有内容都已定义等等。self.sentenceObjs效果很好。它会返回一个与它应该完全相同的对象。self.parseBodySections原因将bodyJSON设置为undefined数组,即使self.sentenceObjs在给定dom我希望映射的对象数组的情况下返回完美对象。出于某种原因,当我运行{{1}时它为每个对象返回undefined。知道为什么会这样吗?我遗漏了dom.map(self.sentenceObjs)的东西吗?

Array.map()

1 个答案:

答案 0 :(得分:1)

问题是,你在瀑布的回调函数中返回“段落”。 所以函数sentenceObjs什么都不返回,或者是undefined。

你需要将一个回调函数传递给sentenceObjs并调用async.map而不是Array.map:

self.parseBodySections = function(dom, cb) {
  async.map(dom, self.sentenceObjs, function(err, bodyJSON) {
    console.log(bodyJSON); // prints: [ undefined, undefined, undefined, undefined, undefined ]
    return cb(null, bodyJSON);
  });
};

self.sentenceObjs = function(section, cb) {
  var paragraphToTextAndLinks = function(cb) {
    return self.paragraphToTextAndLinks(section.children, function(err, paragraphText, links) {
      if (err) {
        return cb(err);
      }

      return cb(null, paragraphText, links);
    });
  };

  return async.waterfall([
    paragraphToTextAndLinks,
    self.paragraphToSentences
  ],
  function(err, sentences, paragraphPlaintext) {
    var paragraph = {
      type: section.name,
      value: paragraphPlaintext,
      children: sentences
    };

    console.log(paragraph); // prints perfect object (too long to show here)

    return cb(null, paragraph);
  });
};