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.

Intentando llamar a una función nombrada con Javascript async luego

Estoy cargando los datos de un archivo csv con d3.csv(). Estoy intentando llamar a una función nombrada después de recibir los datos, pero esto no parece funcionar. Me da el siguiente error:

Uncaught ReferenceError: No se puede acceder a ‘driving’ antes de la inicialización

let driving = d3.csv("./driving.csv").then(ConnectedScatterplot(driving, {
    x: d => d.miles,
    y: d => d.gas,
    title: d => d.year,
    orient: d => d.side,
    yFormat: ".2f",
    xLabel: "Millas recorridas (por habitante por año) →",
    yLabel: "↑ Precio de la gasolina (por galón, promedio ajustado $)",
    width: 600,
    height: 720,
    duration: 5000 // para la animación introductoria; 0 para desactivar
}));

Si hago lo siguiente:

let driving = d3.csv("./driving.csv").then(function (driving) { ConnectedScatterplot(driving, {

No da error y tiene ‘driving’ disponible, pero tampoco hace lo que quiero, que es llamar a ConnectedScatterplot con los parámetros.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que al usar .then() con d3.csv(), la función de devolución de llamada pasada a .then() recibirá los datos cargados como primer argumento. Por lo tanto, la variable driving no estará disponible hasta que se resuelva la promesa y se carguen los datos.

    Para llamar a la función ConnectedScatterplot() después de que se carguen los datos, la sintaxis correcta es:

    d3.csv("./driving.csv")
      .then(function(driving) {
        ConnectedScatterplot(driving, {
          // opciones aquí
        });
      })
      .catch(function(error) {
        console.log("Error al cargar los datos");
        console.error(error);
      });
    

    En este código, la función pasada a .then() recibirá los datos cargados en el parámetro driving. Esta función puede llamar a ConnectedScatterplot() con los datos como argumento.

    El método .catch() también se puede utilizar para manejar errores si los datos no se cargan correctamente.

Comments are closed.