为什么你不能返回一个对象到Javascript的Array.map(),它正确地映射它?

我有两个函数(它们是从一个更大的脚本,所以假设一切都被定义等) self.sentenceObjs很好,它返回一个完全像它应该做的对象self.parseBodySections由于某种原因将bodyJSON设置为一个数组undefined即使self.sentenceObjs返回完美的对象,因为我希望映射的dom数组。一些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; }); }; 

问题是,你在瀑布的callback函数中返回“段落”。 所以函数sentenceObjs什么也没有返回,也没有定义。

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