javascript – 等待函数完成 – 执行是异步的(不按顺序)

前端之家收集整理的这篇文章主要介绍了javascript – 等待函数完成 – 执行是异步的(不按顺序)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在继续使用我的代码之前,我正在尝试获取用户的城市和国家/地区.似乎 javascript没有按照我需要的顺序执行.
$(document).ready(function() {    
  var country,city = '';

  function geoData() {
    $.getJSON('http://ipinfo.io/json?callback=?',function (data) { 
      console.log('step 1');
      country = data.country;
      city = data.city;
      console.log('step 2');
    });
  };

  geoData();        
  console.log('step 3');

  /* rest of the code */
});
@H_301_4@我希望代码执行为:

step 1
step 2
step 3
@H_301_4@但是,当我运行脚本时,我得到:

step 3
step 1
step 2
@H_301_4@为什么代码以异步方式运行?有什么建议我可以解决它吗?

@H_301_4@谢谢.

解决方法

AJAX请求是异步的 – 它是第一个A代表的.如果您的逻辑依赖于请求返回的数据,则需要将其置于回调函数中.试试这个:
var country,city = '';

function geoData() {
    $.getJSON('http://ipinfo.io/json?callback=?',function (data) { 
        console.log('step 1');
        country = data.country;
        city = data.city;
        console.log('step 2');

        step3();
    });
};

function step3() {
    console.log('step 3');
}

geoData();
@H_301_4@另一种方法是使用promise,尽管逻辑流程大致相同:

var country,city = '';

function geoData() {
    return $.getJSON('http://ipinfo.io/json?callback=?',function (data) { 
        console.log('step 1');
        country = data.country;
        city = data.city;
        console.log('step 2');
    });
};

var deferred = geoData();
$.when(deferred).done(function() {
    console.log('step 3');
});
原文链接:https://www.f2er.com/js/157627.html

猜你在找的JavaScript相关文章