将递归承诺的结果添加到数组中
Add results of recursive promises to array
我有一系列递归承诺,它们遍历层次结构,获得当前节点的父节点,直到它到达顶部。我可以很好地得到结果,但我不知道如何存储结果。我正在使用Bluebird来创建getNodeData承诺。
var getParent = function(node) {
getNodeData(node)
.then(function(node) {
if (term.parent) {
getParent(node.parent);
} else {
//return all the nodes as an array
}
});
};
};
您将需要更改您的语句以返回并添加第二个函数到chain,以便对这些promise的响应进行处理。
var getParent = function(term, classifier) {
return dataRetriver.getNodeData(node)
.then(function(node) {
if (term.parent) {
return getParent(node.parent);
} else {
//return all the nodes as an array
return node;
}
});
};
};
getParent(term, classifier)
.then(function(node){
// do stuff with the node
});
假设在没有nodeData的情况下可以爬树,您可以将流程分为两部分:
- 遍历树以查找祖先节点
- 扫描找到的祖先节点以收集nodeData
最后返回一个聚合承诺,该承诺将在所有nodeData到达时解决。
整个过程最好封装在另一个函数中,比如
function getAncestorData(node) {
function getParent(arr, node) {
arr.push(node);
if(node.parent) {
return getParent(arr, node.parent);
} else {
return arr;
}
};
var nodes = getParent([], node);
var promises = nodes.map(function(node) {
return dataRetriver.getNodeData(node);
});
return Promise.all(promises);
}
或者,更简洁地说:
function getAncestorData(node) {
function getParent(arr, node) {
arr.push(node);
return node.parent ? getParent(arr, node.parent) : arr;
};
return Promise.all(getParent([], node).map(function(node) {
return dataRetriver.getNodeData(node);
}));
}
相关文章:
- 向多维数组添加值和从多维数组请求值
- 如何将JS数组添加到Meteor自动表单条目中
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 将行从数组添加到谷歌图表
- 从不同的数组添加重复的图块 PIXI.js
- 如何在 Javascript 中向数组添加其他对象
- 将javascript数组添加到多维数组中
- Coderbyte数组添加解决方案--For循环与For循环
- Knockout.js向数组添加新项
- Highcharts将变量数组添加到序列中
- 向javascript对象数组添加值
- 我可以用Javascript向数组添加函数吗
- 将数组添加到另一个数组
- 你能给被劫持的JavaScript数组添加一个函数吗
- 我可以向数组添加对象键吗
- 如何向JSON数组添加新属性
- 通过将$resource查询数组添加到AngularJS中另一个数组的底部来进行分页加载
- 使用名称/值从 json 数组添加项
- Javascript数组添加 - 所有组合
- 从 json 文件向 javascript 数组添加值