From f2e197453c91d69ef08a5bb32efcf61941d38e8b Mon Sep 17 00:00:00 2001 From: wujunchen Date: Mon, 27 Apr 2026 12:34:33 +0800 Subject: [PATCH] fix: prevent modal confirmation promise from resolving twice The regenerate confirmation modal's onClose callback fired after button click handlers, calling resolve() a second time. While Promise.resolve is idempotent, this was confusing. Added explicit settlement tracking so the promise resolves exactly once regardless of how the modal closes. Change-Id: Ief4cbb78f15fe220a20adaf8343d744ffa8c1653 --- main.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/main.ts b/main.ts index d502038..952c46a 100644 --- a/main.ts +++ b/main.ts @@ -352,6 +352,12 @@ class ParallelReaderPlugin extends Plugin { confirmRegenerateEditedCards(): Promise { return new Promise((resolve) => { + let settled = false; + const settle = (value: boolean) => { + if (settled) return; + settled = true; + resolve(value); + }; const message = this.t('confirmRegenerateEditedCards'); const modal = new Modal(this.app); modal.titleEl.setText(this.t('displayName')); @@ -359,13 +365,13 @@ class ParallelReaderPlugin extends Plugin { const btnRow = modal.contentEl.createDiv({ cls: 'modal-button-container' }); btnRow.createEl('button', { text: 'Cancel' }).addEventListener('click', () => { modal.close(); - resolve(false); + settle(false); }); btnRow.createEl('button', { text: 'OK', cls: 'mod-cta' }).addEventListener('click', () => { modal.close(); - resolve(true); + settle(true); }); - modal.onClose = () => resolve(false); + modal.onClose = () => settle(false); modal.open(); }); }