From a208567ef5d483fcea7272fd0cc80ac4b2b599c7 Mon Sep 17 00:00:00 2001 From: Farnabaz Date: Fri, 27 Oct 2023 15:50:28 +0200 Subject: [PATCH] fix: prevent duplicate parses --- src/runtime/server/storage.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/runtime/server/storage.ts b/src/runtime/server/storage.ts index 4d744f33e..e521c88f1 100644 --- a/src/runtime/server/storage.ts +++ b/src/runtime/server/storage.ts @@ -160,24 +160,26 @@ export const getContent = async (event: H3Event, id: string): Promise { - const body = await sourceStorage.getItem(id) + if (!pendingPromises[hash]) { + // eslint-disable-next-line no-async-promise-executor + pendingPromises[hash] = new Promise(async (resolve) => { + const body = await sourceStorage.getItem(id) - if (body === null) { - return resolve({ _id: contentId, body: null } as unknown as ParsedContent) - } + if (body === null) { + return resolve({ _id: contentId, body: null } as unknown as ParsedContent) + } - const parsed = await parseContent(contentId, body) as ParsedContent + const parsed = await parseContent(contentId, body) as ParsedContent - await cacheParsedStorage.setItem(id, { parsed, hash }).catch(() => {}) + await cacheParsedStorage.setItem(id, { parsed, hash }).catch(() => {}) - resolve(parsed) + resolve(parsed) - delete pendingPromises[hash] - }) + delete pendingPromises[hash] + }) + } - return promise + return pendingPromises[hash] } /**