// 这是调用函数
function superFunction(){
alert("a");
var res=subFunction();
alert(res);
alert("c");
}
// 被调用函数
function subFunction(){
return "b";
}
在这样情况下,代码会按照顺序,从前到后依次执行(如果运气不错没有错误的话),即a、b、c。
但是,当异步情况时又会发生什么呢?
// 被调用函数
function subFunction(){
$.ajax({
...
success:function(data){
return "b";
}
});
}
这时,运行的情况又是怎样的呢?
情况是这样的:a、undefined、c;
使用ajax这种异步方式,是无法直接获取返回值的,因为它的执行顺序无法保证,还没有来得及返回值就已经被调用...
那么问题来了,如何获取异步函数返回值?
把ajax设置为同步(async:false)?NO,NO,NO,我试过了,没用!说实话,这个我自己也不太明白,按理说,设置为同步了,那就 不会另开线程了,应该按代码顺序走啊,为什么还是undefined呢?求解释!
下面来说一下,如果js中遇到异步情况,获取其返回值的解决办法:
那就是——回调。
其实不仅仅是在 js中,在其它语言环境中,回调都是处理异步的最好方式。这是一种通用的技巧。比如,如果你熟悉UNIX的IO模型,就应该知道它处理异步的方式就是用回调实现的。
js由于是弱类型语言,实现回调看起来更简单一些。
// 这是回调函数
function ready(obj){
alert(obj);
}
// 这是异步函数
function async(){
$.ajax({
...
success:function(data){
ready(data);
}
});
}
// 调用异步函数
async();
这样获取data就可以了。