diff --git a/packages/docmanager-extension/src/index.ts b/packages/docmanager-extension/src/index.ts index 45cfbe76d48b..a73280981442 100644 --- a/packages/docmanager-extension/src/index.ts +++ b/packages/docmanager-extension/src/index.ts @@ -241,9 +241,23 @@ ${fileTypes}`; return { ...plugin, schema }; } }); + + // callback to registry change that ensures not to invoke reload method when there is already a promise that is pending + let reloadSettingsRegistry = () => { + let promisePending = false; + + return async () => { + if (!promisePending) { + promisePending = true; + await settingRegistry.reload(pluginId); + promisePending = false; + } + }; + }; + // If the document registry gains or loses a factory or file type, // regenerate the settings description with the available options. - registry.changed.connect(() => settingRegistry.reload(pluginId)); + registry.changed.connect(reloadSettingsRegistry()); return docManager; }