关于js执行顺序的问题,求高人.

kenc88 2011-08-16 03:22:01
假设有3个函数
function A(){}
function B(){}
function C(){}
A()是主函数;
想在A()里面调用B()和C();
B()是操作Action返回操作结果;
C()为更新界面的函数;
过程为:
A(){
....
C();
B();
}
调试的时候的确是按顺序执行的;
也就是说先执行完了C();再执行B();的.
能得到正确的结果
但是正式运行时却发现B();在C();未执行完就先执行了.
也就是B()更新的是没有C()没有操作过的数据;
求解决.!!!!!!
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
最后一个菜鸟 2011-08-17
  • 打赏
  • 举报
回复
九楼说的蛮在理。异步的话,就应该把B放到c的回调函数中执行
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 licip 的回复:]
是不是异步?如果异步那执行的顺序就不好说了。
[/Quote]
肯定是异步了。楼主调试的时候,不产生真正的网络请求,所以没什么真正的等待时间。实际执行时,则要等待ACTION里向服务器和数据库的请求所返回需要的时间。而代码则是B完就直接C,没在B真正执行完才去执行。

要改正的话,应把C放到B里异步执行代码的成功返回回调函数里。或者把B里的异步执行方式变成同步执行方式(大概是请求函数的第三个参数,设为FALSE,具体的查函数语法手册)。
cb1156 2011-08-16
  • 打赏
  • 举报
回复
A(){
....
C();
setTimeout("B()",1);
}
MadEric 2011-08-16
  • 打赏
  • 举报
回复
初步判断B()中存在异步调用
班门弄斧 2011-08-16
  • 打赏
  • 举报
回复
b()和c()的代码贴出
MuBeiBei 2011-08-16
  • 打赏
  • 举报
回复
setTimeout(function(){B();},5000);

用setTimeout延迟加载~·
xiage 2011-08-16
  • 打赏
  • 举报
回复
可以吧B(),放到C()方法的最底层,也就是最耗时间的后面.
潮起潮落 2011-08-16
  • 打赏
  • 举报
回复
可以把显示结果的函数作为操作数据函数的回调函数
licip 2011-08-16
  • 打赏
  • 举报
回复
是不是异步?如果异步那执行的顺序就不好说了。
guoyang842 2011-08-16
  • 打赏
  • 举报
回复
楼主平时要注意结贴 你看你的结帖率为0了,都不来回答了。可以把b()和c()的代码贴出来看看

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧