Necesito solicitar un archivo grande en partes y construir una nueva secuencia legible a partir de la respuesta.
Al principio, solo solicitaba un dato a la vez y, sobre esta base, me di cuenta de la continuación del punto de interrupción para hacer frente a la inestabilidad de la red.
let _this = this let responseList = [] let response = null let reader = null let offset = 0 let start = 0 let end = start + this.RANGE_SIZE return new ReadableStream({ async start(controller) { responseList.push(await fetch(_this.url, {responseType: 'blob', headers: {range: `bytes=${start}-${end}`}})) reader = responseList[0].body.getReader() }, async pull(controller) { try { var {done, value} = await reader.read() } catch (e) { let errorOffset = 0 responseList[0] = await fetch(_this.url, {responseType: 'blob', headers: {range: `bytes=${start}-${end}`}}) reader = responseList[0].body.getReader() while (true) { let {done, value} = await reader.read() if (errorOffset + value.length > offset){ value = value.slice(offset - errorOffset) controller.enqueue(value) return }else { errorOffset += value.length } } } if (done) { offset = 0 start = end + 1 end += _this.RANGE_SIZE responseList.shift() responseList.push(await fetch(_this.url, {responseType: 'blob', headers: {range: `bytes=${start}-${end}`}})) reader = responseList[0].body.getReader() const {done, value} = await reader.read() controller.enqueue(value) offset += value.length } else { controller.enqueue(value) offset += value.length } } })Pero ahora quiero descargar dos segmentos al mismo tiempo para mejorar la eficiencia de la descarga.
async start(controller) { responseList.push(await fetch(_this.url, {responseType: 'blob', headers: {range: `bytes=${start}-${end}`}})) start = end + 1 end += _this.RANGE_SIZE responseList.push(await fetch(_this.url, {responseType: 'blob', headers: {range: `bytes=${start}-${end}`}})) reader = responseList[0].body.getReader() },En este caso, no puedo saber si el segundo lector ha fallado. intentar... atrapar... no funciona.
Hay alguna manera de resolver este problema