微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我希望代码执行为:

step 1
step 2
step 3

但是,当我运行脚本时,我得到:

step 3
step 1
step 2

为什么代码以异步方式运行?有什么建议我可以解决它吗?

谢谢.

解决方法

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();

另一种方法是使用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');
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐