es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El autor de la obra ejecuta aPIRequestContext.get: Contexto de solicitud descartado.

Tengo un código que necesita recorrer el archivo JSON. Sin embargo, arroja el siguiente error:

aPIRequestContext.get: Request context disposed.

Y no tengo idea de por qué.
Aquí está cómo lo implementé:

Cuando intento poner el bloque de código fuera de base.loopJsonData, funciona… pero no funciona cuando está adentro. Intenté imprimir los detalles del JSON y obtengo una salida, 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];

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está dentro del contexto de la petición de la función loopJsonData. El mensaje de error sugiere que el contexto de la petición se ha cerrado, lo cual podría ocurrir si la función intenta hacer una solicitud después de que la página o el contexto del navegador se haya cerrado.

    Una posible solución podría ser asegurarse de que la solicitud se realice dentro de la misma página o contexto del navegador desde donde se llama la función. Esto se puede lograr pasando la instancia relevante de la página o del navegador como parámetro a la función loopJsonData y utilizando dicha instancia para realizar la solicitud.

    Por ejemplo:

    public async loopJsonData(json, data, page, callback) {
      const inputData = this.loadJSONData(json, data);
      for (const [index, val] of inputData.entries()) {
        await page.goto(val.url);
        const response = await page.$eval('body', (element) => {
          return fetch('/some/api/endpoint')
            .then((response) => {
              return response.json();
            })
            .catch((error) => {
              console.error('Error:', error);
            });
        });
        callback(val, index, inputData, response);
      }
    }
    

    Ten en cuenta que ahora la solicitud se realiza utilizando la API fetch en lugar de utilizar la biblioteca request. Esto se debe a que el método fetch es asíncrono, lo que permite tener más control sobre el momento de la solicitud y asegura que la solicitud se realice dentro del mismo contexto desde donde se llama la función.

    Además, el bucle se ha cambiado de utilizar forEach a utilizar un bucle for con entries. Esto permite el uso de la palabra clave await dentro del bucle, lo que asegura que cada iteración se espere antes de que comience la siguiente iteración.

    Finalmente, la función callback se llama con un parámetro adicional response, que contiene el resultado de la solicitud a la API. Esto permite el procesamiento adicional de la respuesta dentro de la función de devolución de llamada.

Comments are closed.