Tengo un código que necesita hacer un bucle en el archivo json. Sin embargo, arroja este error:
aPIRequestContext.get: Request context disposed.
Y no tengo idea de por qué. Así es como lo implementé:
Cuando intento poner el bloque de código fuera de base.loopJsonData, funciona... pero no cuando está dentro. Traté de imprimir los detalles de json y obtengo un resultado, pero no cuando estoy usando request.get()
Aquí está el loopJsonData :
public loopJsonData(json, data, callback) { const inputData = this.loadJSONData(json, data); inputData.forEach((val, i) => { ((item, index) => { callback(item, index, inputData); })(val, i); }); }
Aquí está el loadJSONData :
public loadJSONData(path: string, testData: string) { let jsonPath; this.contentPath = join(process.cwd(), path); this.contentPath = normalizer.normalize(this.contentPath); this.contentPath = JSON.parse(fs.readFileSync(this.contentPath, "utf8")); jsonPath = this.contentPath; return jsonPath[testData]; }
loopJsonData
toma la función asíncrona pero no la await
en el interior (solo la llama sincrónicamente para cada elemento de datos inputData.forEach((val, i) => {
). Con tal enfoque, la request.get()
se ejecutará después de que finalice el método de prueba y correrá con la lógica de eliminación que elimina la request
(esencialmente, usted llama a request.get()
después de que se haya llamado a request.dispose()
).
Para solucionar esto, debe asegurarse de que se esperen todas las devoluciones de llamada asíncronas, algo como esto:
async loopJsonData(json, data, callback) { const inputData = this.loadJSONData(json, data); const promises = []; inputData.forEach((val, i) => { promises.push(callback(val, i, inputData)); }); await Promise.all(promises); }