Я хотел бы знать, возможно ли каким-то образом проверить, еще не завершена ли асинхронная операция в Javascript ..
Поскольку я делаю запрос к базе данных о вызове определенного URL-адреса ... Пока вызов db все еще выполняется, я хочу прекратить любые другие входящие вызовы db (что означает, прекратить любые дальнейшие вызовы этого URL-адреса в случае, если db- запрос все еще находится на рассмотрении).
Это как-то возможно?
Поскольку вызов базы данных занимает несколько минут, и я не хочу запускать еще один вызов базы данных, пока первый еще выполняется. Проблема в том, что я почему-то не могу понять, как проверить, начался ли вызов и все еще выполняется, потому что ответ приходит только после предложения .then (), когда процесс уже завершен.
это моя функция вызова базы данных:
const getWriteIndex = async () => {
return Promise.all(someFunction1, someFunction2...).then(...) {
writeMessageObject = checkDocuments(...);
return Promise.resolve(writeMessageObject);
})).catch((err) => {
return Promise.reject(err);
});
}
Это моя функция URL / Route Call с экспресс:
router.get("/v1/...", someMiddleware(), async function(req,res,next) {
if (read_cached() && initialised_read) {
res.setHeader('Content-Type', 'application/json');
res.json(readmsg_obj);
} else {
try {
//HOW CAN I CHECK HERE IF THE DB-CALL IS ALREADY IN PROGRESS?
readmsg_obj.message = '';
getReadIndex().then((message) => {
initialised_read = true;
readmsg_obj = {...message};
res.setHeader('Content-Type', 'application/json');
res.json(readmsg_obj);
}).catch((reject) => {
logger.error(`/../... : ${reject}`);
initialised_read = false;
res.status(500).send(reject);
});
} catch(err) {
logger.error(`/v1/... : ${err}`);
res.status(500).send(err);
};
}
});