为什么不能将对象返回到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是的,听起来它可能会解决问题。谢谢您的尝试!