Вы должны иметь возможность заключить всю функцию и ее «внешние» переменные в новую функцию:
function getPriorRows(id) {
let priorRows = {}, level = 0;
const getNext = id => new Promise(
...
);
return getNext(id);
}
Тем не менее, ваше создание явного new Promise
в каждой итерации является анти-Promise-pattern:
function getPriorRows(id) {
let priorRows = {}, level = 0;
const getNext = id => fetch(`/api/org/${id}`).then(result => {
priorRows[level++] = result
if (result.parentID) {
return getNext(result.parentID));
} else {
return priorRows;
}
});
return getNext(id);
}
В любом случае, преимущество переноса состояния таким образом заключается в том, что теперь вы можете иметь несколько вызовов на getPriorRows
, проходящих параллельно, не мешая друг другу.
РЕДАКТИРОВАТЬ второй код, отредактированный для исправления ошибки копирования и вставки с рекурсией - вы должны рекурсивно вызывать внутреннюю функцию, а не внешнюю.