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