Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

199
Vistas
Proper Asynchronous Request Handling - JS

I am making an application. The application makes two requests, the first is to the MapBox API to load a map and the second is to the Yelp Fusion API (through my node server). The through throttling testing I have found that the MapBox Call takes aproximately 1/2 the time to complete as the Yelp Call.

I am a bit confused how to manage the two requests. Do I load one and then the next? Do I load them both and then create two input functions to account for the Yelp loading first/ the MapBox loading first?

Here is how my code is structured currently:

      // -------------------------- // Yelp API Call // ------------------------- //
$.ajax({
    type: 'POST',
    data: {
      "food_type": getParameterByName('type', window.location.href),
      "geolocation": false,
      "long": -1,
      "lat": -1,
      "radius": 1000,
      "limit": 30
    },
    success: function(response) {
      YelpCallback(response);
    },
    error: function(xhr) {
      console.log("Failure");
      console.log(xhr)
    },
    url: POST_baseurl + "yelp"
  });


  // -------------------------- // MapBox API Call // ------------------------- //
  mapboxgl.accessToken = 'pk.<accesstoken>.<accesstoken>';
  var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/jeremysmorgan/<mapstyle url>',
    center: [lat, long],
    zoom: 13
  });
  map.on('load', function(e) {
    var map_load_time = new Date().getTime() - map_start_time;
    console.log("map_load_time: " + map_load_time);

    MapCallback(e);
  });

    function YelpCallback(data) {
  yelp_loaded = true;
  yelp_data = data;
  if (map_loaded) {
    main();
  }
}

function MapCallback(e) {
  map_loaded = true;
  if (YelpCallback) {
    main();
  }
}
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Something like this should work. Read up on callbacks (proper ones), they're very helpful. http://cwbuecheler.com/web/tutorials/2013/javascript-callbacks/

function YelpAjax(callback)
{
  $.ajax({
    //yelp request,
    success: function(response){
      callback(response); //once done, call this argument with parameter: response
    }
  });
}

map.onload('load', function(e){
  //same stuff

  YelpAjax(function(response){ //this anonymous function is the argument.
    main();
  })
})

Contain your Yelp AJAX request in a function with a callback. Put this function in map.onload. Call main() afterwards.

It's effectively like putting main() inside your Ajax success, but with less literal nesting.

$.ajax({
  //yelp request,
  success: function(response){
    main();
  }
});

You could also try the async library which allows you to control asynchronous functions very elegantly, but you might need to brush up first before tackling something like that. http://caolan.github.io/async/

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda