Фон
У меня проблема с тем, что мое обещание не возвращается к вызывающей функции. Я знаю, что это обычно работает, но не в рекурсивной функции. Вызывается разрешение, и я вижу, что функция FindElementById
правильно находит элемент, однако вызов в значении UpdateMasterMenuItem(result, queuedItem)
не вызывается.
Что я делаю в своих фрагментах кода, что я пытаюсь сделать?
L oop над коллекцией queuedItems
и найти эти элементы в другой коллекции menuItems
. Я делаю это, передавая идентификатор элемента, который я пытаюсь найти, а также коллекцию, в которой он находится, в рекурсивную функцию 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);
}
});
});
}