diff --git a/packages/nc-gui/components/erd/View.vue b/packages/nc-gui/components/erd/View.vue index dedd081500..3af929cde1 100644 --- a/packages/nc-gui/components/erd/View.vue +++ b/packages/nc-gui/components/erd/View.vue @@ -45,14 +45,26 @@ const config = reactive({ isFullScreen: false, }) -const loadMetaOfTablesNotInMetas = async (localTables: TableType[]) => { - await Promise.all( - localTables - .filter((table) => !metas.value[table.id!]) - .map(async (table) => { +const fetchMissingTableMetas = async (localTables: TableType[]) => { + const chunkSize = 5 + + // Function to process a chunk of tables + const processChunk = async (chunk: TableType[]) => { + await Promise.all( + chunk.map(async (table) => { await getMeta(table.id!) }), - ) + ) + } + + // filter out tables that are already loaded and are not from the same source + const filteredTables = localTables.filter((t) => !metas.value[t.id!] && t.source_id === props.sourceId) + + // Split the tables into chunks and process each chunk sequentially to avoid hitting throttling limits + for (let i = 0; i < filteredTables.length; i += chunkSize) { + const chunk = filteredTables.slice(i, i + chunkSize) + await processChunk(chunk) + } } const populateTables = async () => { @@ -73,7 +85,7 @@ const populateTables = async () => { localTables = baseTables.value } - await loadMetaOfTablesNotInMetas(localTables) + await fetchMissingTableMetas(localTables) tables.value = localTables .filter(