【发布时间】:2020-04-19 19:08:49
【问题描述】:
背景
我有一个问题,我的承诺没有返回到它的调用函数。我知道这通常会起作用,但不是在递归函数中。正在调用解析,我可以看到函数 FindElementById 正在正确找到元素,但是未调用 thenable UpdateMasterMenuItem(result, queuedItem) 中的调用。
我在我的代码 sn-ps 中做了什么,我想做什么?
遍历集合 queuedItems 并在另一个集合 menuItems 中找到这些项目。我通过将我要查找的项目的 ID 以及它所在的集合传递给递归函数 FindElementById 来做到这一点。找到该项目后,我将返回找到的项目并在函数 UpdateMasterMenuItem 中对其执行一些其他操作。
代码
// Calling Loop
queuedItems.forEach(function (queuedItem) {
FindElementById(queuedItem.dataset.id, menuItems).then(function(result) {
UpdateMasterMenuItem(result, queuedItem);
});
});
// Recursive Function
function FindElementById(id, menuItems) {
return new Promise((resolve) => {
menuItems.forEach(function (menuItem) {
if (menuItem.Id === id) {
return resolve(menuItem);
} else if (menuItem.Child.length > 0) {
FindElementById(id, menuItem.Child);
}
});
});
}
【问题讨论】:
-
FindElementById返回承诺是否有原因?该方法中没有任何异步操作。
标签: javascript recursion promise