js:异步时函数返回值问题

本文探讨了JavaScript中异步函数的执行顺序问题,并通过实例展示了如何利用回调函数正确处理异步操作的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 这是调用函数

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就可以了。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值