![](/img/trans.png)
[英]In Node.js, an asynchronous recursive function is resolving empty promises
[英]Recursive call in Asynchronous function in node.js
我编写了一个递归查询来以数据库级别或分层方式更新数据。
我写了这段代码:
let updateInvitationRewards = function(parent, level, callback) {
Service.customer.getOneCustomer({
_id: parent
}, {}, {}, function(err, data) {
console.log(data.email);
level--;
if (data.parent) {
parent = data.parent.id;
} else if (level == 0 || data.parent == null)
callback("end");
updateInvitationRewards(parent, level--, callback);
});
};
updateInvitationRewards(parent, level, function(string) {
console.log(string);
cb();
});
此查询给出如下错误:
Error: Callback was already called.
请帮助我,我是这些类型的回调的新手。
使用所有括号,我们有:
if (data.parent) {
parent = data.parent.id;
} else if (level == 0 || data.parent == null) {
callback("end");
}
updateInvitationRewards(parent, level--, callback);
如果level
等于0或data.parent
为null,则回调是触发器,然后是具有相同回调的updateInvitationRewards
。
要解决这个问题 :
if (data.parent) {
parent = data.parent.id;
} else if (level == 0 || data.parent == null) {
return callback("end"); // the execution stops here
}
updateInvitationRewards(parent, level--, callback);
在任何函数上, Callback只应该被调用一次 。 如果多次Error: Callback was already called.
会来。
从您的代码示例中,可以看出函数将以递归方式调用。 因此,当级别变为0或父级为空时,可能会出现错误。
考虑以下情况,当级别为null或父级为第一次调用回调时为null。 但递归调用将继续发生。 假设在下一次执行中,如果父级为null,则第二次调用回调,这将引发错误。
从代码中,我看不出level的用途,但我建议实现以下代码,这样可以确保下次不调用回调。
let updateInvitationRewards = function(parent, level, callback) {
Service.customer.getOneCustomer({
_id: parent
}, {}, {}, function(err, data) {
console.log(data.email);
level--;
if (data.parent) {
parent = data.parent.id;
updateInvitationRewards(parent, level--, callback);
} else if (level == 0 || data.parent == null)
callback("end");
});
};
updateInvitationRewards(parent, level, function(string) {
console.log(string);
cb();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.