背景
我有一个问题,我的承诺没有返回到它的调用函数。我知道这通常会起作用,但不是在递归函数中。正在调用解析,我可以看到该函数FindElementById正在正确找到元素,但是未调用 thenableUpdateMasterMenuItem(result, queuedItem)中的调用。
我在我的代码片段中做什么,我想做什么?
循环一个集合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);
}
});
});
}