diff --git a/src/src/App.vue b/src/src/App.vue index a38be74..3c1bc39 100644 --- a/src/src/App.vue +++ b/src/src/App.vue @@ -173,6 +173,7 @@ import jsYaml from "js-yaml"; import {ref} from "vue"; import Hotkey from "@/components/hotkey.vue"; import ExtraNetworksPopup from "@/components/extraNetworksPopup.vue"; +import waitTick from "@/utils/waitTick"; export default { name: 'App', @@ -370,7 +371,7 @@ export default { this.gradioAPI.setData('languageCode', val).then(data => { }).catch(err => { }) - this.loadGroupTags() + waitTick.addWaitTick(() => this.loadGroupTags()) }, immediate: false, }, @@ -782,7 +783,7 @@ export default { } if (data.tagCompleteFile !== null) { this.tagCompleteFile = data.tagCompleteFile - this.$nextTick(() => { + waitTick.addWaitTick(() => { this.$refs.translateSetting.getCSV(this.tagCompleteFile) }) } else { @@ -870,7 +871,8 @@ export default { }) this.handlePaste() - this.loadGroupTags() + + waitTick.addWaitTick(() => this.loadGroupTags()) /*this.gradioAPI.getVersion().then(res => { this.version = res.version @@ -905,7 +907,7 @@ export default { }) }, loadGroupTags() { - this.gradioAPI.getGroupTags(this.languageCode).then(data => { + return this.gradioAPI.getGroupTags(this.languageCode).then(data => { if (!data || data === '') { this.groupTags = [] } else { diff --git a/src/src/components/favorite.vue b/src/src/components/favorite.vue index f34d950..9e174c7 100644 --- a/src/src/components/favorite.vue +++ b/src/src/components/favorite.vue @@ -120,10 +120,10 @@ export default { } }, emits: ['use'], - async mounted() { - for (const item of this.favorites) { - await this.getFavorites(item.key) - } + mounted() { + this.favorites.forEach(item => { + waitTick.addWaitTick(() => this.getFavorites(item.key)) + }) }, methods: { formatTime(time) { diff --git a/src/src/utils/waitTick.js b/src/src/utils/waitTick.js new file mode 100644 index 0000000..7b88810 --- /dev/null +++ b/src/src/utils/waitTick.js @@ -0,0 +1,41 @@ +import { nextTick } from 'vue' + +export default { + /** + * @types Function[] + */ + waitTickList: [], + startingTick: false, + /** + * + * @param cb Function + */ + addWaitTick(cb) { + this.waitTickList.push(cb) + return this.startWaitTick() + }, + + async execatueWaitTick() + { + if (this.startingTick) return + + this.startingTick = true + + while (this.waitTickList.length) { + const cb = this.waitTickList.shift() + await nextTick().then(cb) + } + + this.startingTick = false + }, + + async startWaitTick() { + if (!this.startingTick) + { + return nextTick(() => this.execatueWaitTick().catch(e => { + this.startingTick = false + return this.startWaitTick() + })) + } + } +}