Я реализовал рекурсивную функцию в requestHandler, который я сделал для сериализации запросов API, а также чтобы убедиться, что конечная точка в данный момент не запрашивается. Чтобы убедиться, что конечная точка в данный момент не запрашивается, я добавляю ее в Set и проверяю ее с помощью условных выражений.
Проблема в том, что этот рекурсивный подход потребляет довольно много памяти, когда много запросов выполняется к одной и той же конечной точке. Можно ли как-нибудь уменьшить объем памяти и производительность? Я хотел бы услышать любой альтернативный подход, который я мог бы использовать вместо рекурсии. Ниже вы можете найти мой код.
async request(endpoint, domain, method, headers, query, body, attachments) {
const requestURL = `${(domain === "discord") ? this.discordBaseURL :
(domain === "trello") ? this.trelloBaseURL : domain}/${endpoint}`;
if (this.queueCollection.has(endpoint) === false) { // queueCollection is the Set in which I store endpoints that are currently being requested by my requestHandler.
this.queueCollection.add(endpoint);
const response = await this.conditionalsHandler(endpoint, requestURL, method, headers, query, body, attachments);
this.queueCollection.delete(endpoint);
return response;
}
else {
const response = new Promise((resolve) => {
setTimeout(() => { // https://stackoverflow.com/a/20999077
resolve(this.request(endpoint, domain, method, headers, query, body, attachments)); // This is where I make the method recursive to call itself back until the endpoint is no longer in the queueCollection Set.
}, 0);
});
return response;
}
}