Следующий код vue приведет к утечке памяти, но я не знаю причинуJavascript

Форум по Javascript
Ответить
Anonymous
 Следующий код vue приведет к утечке памяти, но я не знаю причину

Сообщение Anonymous »

Код: Выделить всё

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

Я написал этот код для выполнения HTTP-запроса в приложении VUE и использую AbortController для отмены запроса, эти AbortControllers будут помещены в ref([]), но это вызовет утечку памяти, и я не знаю причину.
Если я назначу контроллер = null, наконец, эту проблему можно исправить, но я не знаю причину.
Что вызывает утечку памяти?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... the-reason
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»