Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不能将对象返回到Javascript';s Array.map()是否正确映射了它?_Javascript_Arrays_Json_Node.js_Map - Fatal编程技术网

为什么不能将对象返回到Javascript';s Array.map()是否正确映射了它?

为什么不能将对象返回到Javascript';s Array.map()是否正确映射了它?,javascript,arrays,json,node.js,map,Javascript,Arrays,Json,Node.js,Map,下面我有两个函数(它们是从一个较大的脚本中提取出来的,因此假设所有内容都已定义等。self.sentenceObjs效果很好。它返回一个与预期完全相同的对象。self.parseBodySections出于某种原因,将bodyJSON设置为一个未定义的数组,即使self.sentenceObjs正在返回p。)给定要映射的对象数组dom时,如果对象是完美的对象。出于某种原因,当我运行dom.map(self.sentenceObjs)时,它会为每个对象返回未定义的对象。知道为什么会这样吗?我缺少a

下面我有两个函数(它们是从一个较大的脚本中提取出来的,因此假设所有内容都已定义等。
self.sentenceObjs
效果很好。它返回一个与预期完全相同的对象。
self.parseBodySections
出于某种原因,将
bodyJSON
设置为一个
未定义的
数组,即使
self.sentenceObjs
正在返回p。)给定要映射的对象数组
dom
时,如果对象是完美的对象。出于某种原因,当我运行
dom.map(self.sentenceObjs)
时,它会为每个对象返回未定义的对象。知道为什么会这样吗?我缺少
array.map()
了吗

  self.parseBodySections = function(dom, cb) {
    var bodyJSON = dom.map(self.sentenceObjs);
    console.log(bodyJSON); // prints: [ undefined, undefined, undefined, undefined, undefined ]

    return cb(null, bodyJSON);
  };

  self.sentenceObjs = function(section) {
    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 paragraph;
    });
  };

问题是,在瀑布函数的回调函数中返回“段落”。 因此,函数sentenceObjs不返回任何内容或未定义的内容

您需要将回调函数传递给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);
  });
};

问题是,在瀑布函数的回调函数中返回“段落”。 因此,函数sentenceObjs不返回任何内容或未定义的内容

您需要将回调函数传递给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);
  });
};

瀑布函数返回什么?我对这个库不太熟悉,但通过阅读文档,它似乎实际上并没有返回函数的组合,而是将其暴露在回调中。您能检查一下
console.log(async.瀑布函数)吗([…
并查看它的输出结果?请发布一个简短的、自包含的示例来演示这个问题。@elclanrs是的,我认为它与此有关,因为它返回
未定义的
。我自己对库很陌生,所以我可能误解了一些内容。我认为您只需要在t中运行
parseBodySections
他回调了
瀑布
,而不是相反,因为
瀑布
是异步的部分。我可能错了,但是…@elclans是的,这听起来可能会解决这个问题。谢谢你的尝试。
瀑布
返回了什么?我对这个库不是很熟悉,但通过阅读文档,它似乎不太熟悉实际上,返回函数的组合,它将其公开到回调中([…
并查看它的输出结果?请发布一个简短的、自包含的示例来演示这个问题。@elclanrs是的,我认为它与此有关,因为它返回
未定义的
。我自己对库很陌生,所以我可能误解了一些内容。我认为您只需要在t中运行
parseBodySections
他调用了
瀑布
,而不是相反,因为
瀑布
是异步的部分。我可能错了,但是…@elclans是的,听起来它可能会解决问题。谢谢您的尝试!