Поведение V8 на node.js при завершении Promise, у которого есть активные ожидания других промисов
Есть функция примерно такого содержания, которая выполняется в node.js:
function getResponse() {
return new Promise(async (res, rej) => {
setTimeout(() => {
rej('TIMEOUT')
}, 5000);
const data = reduxStore.getState(); // Получаем некоторые данных из хранилища
// По данным формируем запрос
await getDbData(SQLQuery).then((result) => {
res(result)
}).catch((e) => { rej(e) });
})
}
Допустим, сервер вовремя не ответил на запрос getDbData и я возвращаю reject из setTimeout.
Оставим за скобками вопросы про таймауты на стороне библиотеки БД. Там на самом деле может быть множественная цепочка вызовов.
Мне интересно, как будет вести себя в этом случае движок V8 в части данных которые он получил в промисе и ожиданию getDbData, которое все еще активно?
Удалит ли он из памяти данные, которые были получены в переменную data и ожидание обещания из getDbData(при очередном сборе мусора) или будет ожидать завершения всей цепочки вызова и считать сформированный внутри промиса, скажем так, контекст, активным и не подлежащим удалению?
У меня есть несколько таких функций, которые в data могут считывать под 1000 элементов под 200Мб.
На тестовой среде воспроизвести не получается.
Для общего развития хочется понять, что будет твориться внутри, если возвращать из промиса reject при ожидании выполнения других обещаний.