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 19fef45..081d706 100644 --- a/src/src/components/favorite.vue +++ b/src/src/components/favorite.vue @@ -78,6 +78,7 @@ import common from "@/utils/common"; import LanguageMixin from "@/mixins/languageMixin"; import IconSvg from "@/components/iconSvg.vue"; +import waitTick from '@/utils/waitTick'; export default { components: {IconSvg}, @@ -122,7 +123,7 @@ export default { emits: ['use'], mounted() { this.favorites.forEach(item => { - this.getFavorites(item.key) + waitTick.addWaitTick(() => this.getFavorites(item.key)) }) }, methods: { @@ -134,7 +135,7 @@ export default { let favoriteItem = this.favorites.find(item => item.key === favoriteKey) if (!favoriteItem) return this.loading = true - this.gradioAPI.getFavorites(favoriteKey).then(res => { + return this.gradioAPI.getFavorites(favoriteKey).then(res => { if(res && res.length > 0){ // 倒序 res.reverse() @@ -301,4 +302,4 @@ export default { }, } } - \ No newline at end of file + diff --git a/src/src/components/history.vue b/src/src/components/history.vue index 4bf12da..3d456c9 100644 --- a/src/src/components/history.vue +++ b/src/src/components/history.vue @@ -130,7 +130,7 @@ export default { let historyItem = this.histories.find(item => item.key === historyKey) if (!historyItem) return this.loading = true - this.gradioAPI.getHistories(historyKey).then(res => { + return this.gradioAPI.getHistories(historyKey).then(res => { if (res && res.length > 0) { // 倒序 res.reverse() @@ -282,4 +282,4 @@ export default { }, } } - \ No newline at end of file + diff --git a/src/src/components/translateSetting.vue b/src/src/components/translateSetting.vue index 4059dbe..c69a97e 100644 --- a/src/src/components/translateSetting.vue +++ b/src/src/components/translateSetting.vue @@ -267,7 +267,7 @@ Github: {{name}}` if (this.tagCompleteFilesLoading) return this.tagCompleteFilesLoading = true this.tagCompleteFiles = [] - this.gradioAPI.getCSVs().then(res => { + return this.gradioAPI.getCSVs().then(res => { this.tagCompleteFilesLoading = false if (!res || res.length <= 0) return this.tagCompleteFiles.push({ @@ -375,4 +375,4 @@ Github: {{name}}` }, }, } - \ No newline at end of file + 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() + })) + } + } +}