【发布时间】:2017-05-21 06:32:18
【问题描述】:
我有一个计算一个值的函数,计算后返回一个回调到另一个函数的值。
情况开始变得非常复杂,我在其中有 2 个嵌套的 for 循环和递归。
错误是:uncaughtException: Callback was already called.
首先让我编写代码示例。
functionTest (array, function (err, result) {
if (err) {
nresponse.error(err);
} else {
nresponse.success(res, result);
}
);
function dependicies(array, callback) {
async.map(array, function(item, outerNext) {
async.map(item.members, function(value, innerNext){
dependicies(array, callback);
innerNext(); //should I write this after or before the recursion call?
outerNext(); //where should I call the outerNext?
});
}, function(err, result){
**
if(err){
callback(err);
}else{
callback(null, sthComputedInMap);
}
});
}
当我在 cmets 中编写代码时,我应该在递归调用之后还是之前编写 innerNext?除了这个问题,我应该在第二张地图的范围之后调用outerNext吗?
事情很混乱。我要怎么收拾?我在看文件。
** 这不是第一个async.map 结束的地方。我认为问题在于recursion 中的each async.map。我想要的是把它称为break。
在代码中,我尝试循环遍历一个数组。假设我尝试获取一个文档的名称字段列表,从它自己开始到它的最后一个孙子。我追踪的数组结构是这样的;
[
{id: 1, childrenIds: [3, 4, 5], name: ""},
{id: 3, childrenIds: [8, 5], name: ""},
{id: 21, childrenIds: [ 5], name: ""},
{id: 7, childrenIds: [5], name: ""},
{id: 5, childrenIds: [], name: ""}
]
第一个 async.map 用于遍历每个文档,另一个用于遍历其子数组。
希望对你有帮助:)
【问题讨论】:
-
如果你能让人们更多地了解你想要实现的目标可能会有所帮助,可能只是我,但我很难理解你提到的递归,也许更多的上下文会有所帮助?
-
代码中的递归中断在哪里。我的意思是说应该有一个条件,这样它就不会再次调用dependencies()并执行下一个Callbacks。
-
@OliverRadini 好的,我会尝试的。请等待更新。
-
@FarooqKhan 我根据您的评论编辑了问题。
-
@OliverRadini 我添加了
标签: javascript node.js asynchronous recursion callback