Вы не разрешили это здесь,
// ...
if (list[i].children) {
findOrder(list[i].children, key);
}
// ...
Чтобы сообщить внешнему Обещанию, когда разрешать это, вы должны явно сделать это:
// ...
if (list[i].children) {
findOrder(list[i].children, key).then(result => {
// as resolve can only be called once,
// do not call it if it doesn't found anything
if (result) resolve(result)
});
}
// ...
Это должно работать. Однако в этой реализации слишком много бесполезных вызовов для «разрешения». Лучше найти соответствующий элемент напрямую и разрешить его.
Вот пример:
const findOrder = function (list, key) {
return new Promise((resolve, reject) => {
resolve(find(list, key))
function find (_list, key) {
for (let i = 0; i < _list.length; i++) {
if (_list[i].key === key) return _list[i].children
if (_list[i].children) {
const c = find(_list[i].children, key)
if (c) return c
}
}
return undefined
}
})
}