Der folgende Vue-Code führt zu einem Speicherverlust, aber ich kenne den Grund nichtJavaScript

Javascript-Forum
Anonymous
 Der folgende Vue-Code führt zu einem Speicherverlust, aber ich kenne den Grund nicht

Post by Anonymous »

Code: Select all

import { ref, onMounted, onBeforeUnmount, toRefs } from 'vue'

const props = defineProps({
sessionUrl: { type: String, required: true },
offerData: { type: Object, required: true }
})

const { sessionUrl, offerData } = toRefs(props)

const httpIntervalId = ref(null)
const fetchControllers = ref([])

const MAX_CONCURRENT = 3

const sendHttpRequest = async (candidates) => {
if (fetchControllers.value.length >= MAX_CONCURRENT) return

const controller = new AbortController()
fetchControllers.value.push(controller)

try {
const res = await fetch(sessionUrl.value, {
method: 'PATCH',
headers: {
'Content-Type': 'application/trickle-ice-sdpfrag',
'If-Match': '*'
},
body: generateSdpFragment(offerData.value, candidates),
signal: controller.signal
})

} catch (err) {
if (err.name === 'AbortError') {
} else {
console.error('fetch error', err)
}
} finally {
const idx = fetchControllers.value.indexOf(controller)
if (idx !== -1) fetchControllers.value.splice(idx, 1)
}
}

const cancelHttpRequest = (msg) => {
if (!fetchControllers.value || fetchControllers.value.length === 0) return

const controllers = fetchControllers.value.slice()
controllers.forEach((c) => {
try { c.abort() } catch (e) { /* ignore */ }
})

fetchControllers.value = []
}

const generateSdpFragment = (offerData, candidates) => {
return ''
}

onMounted(() => {
if (httpIntervalId.value) {
clearInterval(httpIntervalId.value)
httpIntervalId.value = null
}

httpIntervalId.value = setInterval(() => {
sendHttpRequest()
}, 5000)
})

onBeforeUnmount(() => {
if (httpIntervalId.value) {
clearInterval(httpIntervalId.value)
httpIntervalId.value = null
}
cancelHttpRequest()
})

defineExpose({ cancelHttpRequest })

Ich habe diesen Code geschrieben, um eine HTTP-Anfrage in der VUE-Anwendung zu stellen, und ich verwende AbortController, um die Anfrage abzubrechen. Diese AbortController werden in einen ref([]) eingefügt, aber es wird einen Speicherverlust verursachen, und ich kenne den Grund nicht.
Wenn ich endlich Controller = Null zuweise, kann dieses Problem behoben werden, aber ich kenne den Grund nicht.
Was verursacht den Speicherverlust?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post