refactor: try avoid request api at same time

pull/337/head
bluelovers 2024-06-06 17:43:11 +08:00
parent 9a2a366e65
commit f304c5eb84
3 changed files with 51 additions and 8 deletions

View File

@ -173,6 +173,7 @@ import jsYaml from "js-yaml";
import {ref} from "vue"; import {ref} from "vue";
import Hotkey from "@/components/hotkey.vue"; import Hotkey from "@/components/hotkey.vue";
import ExtraNetworksPopup from "@/components/extraNetworksPopup.vue"; import ExtraNetworksPopup from "@/components/extraNetworksPopup.vue";
import waitTick from "@/utils/waitTick";
export default { export default {
name: 'App', name: 'App',
@ -370,7 +371,7 @@ export default {
this.gradioAPI.setData('languageCode', val).then(data => { this.gradioAPI.setData('languageCode', val).then(data => {
}).catch(err => { }).catch(err => {
}) })
this.loadGroupTags() waitTick.addWaitTick(() => this.loadGroupTags())
}, },
immediate: false, immediate: false,
}, },
@ -782,7 +783,7 @@ export default {
} }
if (data.tagCompleteFile !== null) { if (data.tagCompleteFile !== null) {
this.tagCompleteFile = data.tagCompleteFile this.tagCompleteFile = data.tagCompleteFile
this.$nextTick(() => { waitTick.addWaitTick(() => {
this.$refs.translateSetting.getCSV(this.tagCompleteFile) this.$refs.translateSetting.getCSV(this.tagCompleteFile)
}) })
} else { } else {
@ -870,7 +871,8 @@ export default {
}) })
this.handlePaste() this.handlePaste()
this.loadGroupTags()
waitTick.addWaitTick(() => this.loadGroupTags())
/*this.gradioAPI.getVersion().then(res => { /*this.gradioAPI.getVersion().then(res => {
this.version = res.version this.version = res.version
@ -905,7 +907,7 @@ export default {
}) })
}, },
loadGroupTags() { loadGroupTags() {
this.gradioAPI.getGroupTags(this.languageCode).then(data => { return this.gradioAPI.getGroupTags(this.languageCode).then(data => {
if (!data || data === '') { if (!data || data === '') {
this.groupTags = [] this.groupTags = []
} else { } else {

View File

@ -120,10 +120,10 @@ export default {
} }
}, },
emits: ['use'], emits: ['use'],
async mounted() { mounted() {
for (const item of this.favorites) { this.favorites.forEach(item => {
await this.getFavorites(item.key) waitTick.addWaitTick(() => this.getFavorites(item.key))
} })
}, },
methods: { methods: {
formatTime(time) { formatTime(time) {

41
src/src/utils/waitTick.js Normal file
View File

@ -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()
}))
}
}
}