【发布时间】:2021-07-09 04:50:06
【问题描述】:
我在 javascript 异步函数中使用递归来计算在每个经理手下工作的员工人数。 尝试了解我的函数有什么问题以及为什么它只返回一半的员工
async function countEmployees(E, count) {
if (E.employees === 'undefined' || E.employees == null) {
return 0
}
else {
count += E.employees.length
E.employees.forEach(async emp => {
console.log('id:', emp.id, 'count:', count)
await countEmployees(emp, count)
})
}
}
更新: 我想我解决了!一直在覆盖计数 现在修改后的版本可以使用了
var count
async function countEmployees(E) {
if (E.employees === 'undefined' || E.employees == null) {
return 0
}
else {
count += E.employees.length
for (const ind in E.employees) {
if (Object.hasOwnProperty.call(E.employees, ind)) {
const emp = E.employees[ind];
await countEmployees(emp)
}
}
}
}
setTimeout(() => {
console.log(count) }, 5000);
【问题讨论】:
-
我建议返回数字而不是将其作为参数传递
-
为什么需要异步?
-
@mplungjan 如果使用
async,则有一些await休眠0 ms,这样UI就不会被阻塞 -
最好提供一些简单的数据结构来显示您的“错误”,以便其他用户可以调试您的代码
-
@nonopolarity 在我看来,这必须是一个庞大的组织,需要异步来计算员工人数
标签: javascript recursion ecmascript-6 promise