首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正确的异步请求处理- JS

正确的异步请求处理- JS
EN

Stack Overflow用户
提问于 2017-03-31 06:02:38
回答 1查看 298关注 0票数 2

我正在申请。应用程序发出两个请求,第一个是向Yelp API发出加载地图的请求,第二个是向MapBox API发出的请求(通过我的节点服务器)。通过节流测试,我发现MapBox调用的完成时间大约是Yelp调用的1/2。

我有点困惑如何管理这两个请求。我是先加载一个然后再加载下一个吗?我是不是两个都加载,然后创建两个输入函数来解释Yelp加载/ MapBox加载?

下面是我的代码目前的结构:

      // -------------------------- // 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();
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 07:56:15

像这样的东西应该行得通。阅读回调(适当的回调),它们是非常有用的。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();
  })
})

将Yelp AJAX请求包含在一个带有回调的函数中。将此函数放在map.onload中。之后调用main()

这实际上类似于将main()放入Ajax的success中,但嵌套更少。

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

您也可以尝试使用async库,它允许您非常优雅地控制异步函数,但在处理类似的事情之前,您可能需要先复习一下。http://caolan.github.io/async/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43129143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档