我正在尝试在存储在Elasticsearch中的数据集中构建关系。我目前无法返回关系的所有结果。当我运行递归函数时,它只返回它找到的第一个结果。我很难理解承诺以及如何正确地使用它们以达到我的目的。任何有助于返回所有数据的帮助将不胜感激。
单击按钮时调用server.js:
app.get('/parent/:elemName', function (req, res) {
var elemName = req.params.elemName;
streams.getUpstream(elemName).then(function (resp) { console.log("***** " + resp); });
});
second.js调用上一个代码示例中的getUpstream:
exports.getUpstream = function (element) {
return getStream(element, 'parent');
};
在上面的getUpstream中调用的getStream函数:
function getStream(element, direction) {
var stream = [];
function climb(elementName) {
return search.getDetails(elementName).then(function (searchResult) {
var element = searchResult.hits.hits[0]._source.versions[0];
var parents = element[direction];
console.log("stream " + stream);
// Base case
if (!parents) return [];
// Recursive case
var promises = parents.map(function (parent) {
if (!_.includes(stream, parent)) {
console.log("inside " + parent);
stream.push(parent);
climb(parent);
}
});
return stream;
});
}
return climb(element);
}
第一个代码段调用getUpstream方法并打印出结果。 console.log最终将执行数据的res.send。该日志用于调试目的。
第二个代码片段调用getStream,仅作为从该文件外部调用该方法的桥梁。
第三个代码片段调用了一个详细信息方法,该方法为我提供了一个JSON文档,其中包含父字段,其中包含当前元素父项的所有元素的列表。如果这些父母中的任何一个不在流中,那么添加它们并寻找他们的父母。基本上,我只是试图返回一个元素的所有父项的列表(没有特定的顺序)。它可能是一个,也可能是100.
正如我上面所说,我的代码只返回元素的直接父元素,然后继续计算所有元素。不幸的是,我没有得到它最终计算的完整结果。如何返回完整的结果?