我想知道是否有可能以某种方式检查 Javascript 中的异步操作是否仍处于挂起状态。因为我正在对调用特定 URL 进行数据库请求...虽然 db 调用仍在进行中,但我想停止任何其他传入的 db-calls(这意味着,如果 db-request 仍处于挂起状态,则停止对该 URL 的任何进一步调用)。这有可能吗?
因为数据库调用最多需要几分钟,而且我不想在第一个数据库调用仍在进行时启动另一个数据库调用。问题是,我不知道如何检查调用是否已经开始并且仍在正在进行中,因为响应仅在进程已经完成时的 .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 函数,带有 express:
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);
};
}
});