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
This commit is contained in:
wujunchen 2026-04-27 12:34:33 +08:00
parent b02d0f4f30
commit f2e197453c

12
main.ts
View file

@ -352,6 +352,12 @@ class ParallelReaderPlugin extends Plugin {
confirmRegenerateEditedCards(): Promise<boolean> {
return new Promise<boolean>((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();
});
}