如何确保两个函数的运行顺序

2017-04-14 19:14:37 +08:00
 cheerzeng

大家好, 不怎么深入 js, 对运行顺序有点疑惑。 意图是: 有三个下拉菜单,二级菜单想通过一级菜单选中的选项去服务器拿数据然后作为选项, 同样三级菜单根据二级菜单的被选中的选项去服务器拿数据作为选项。

有两个函数, update_data1, 更新二级菜单选项, update_data2, 更新三级菜单选项,

函数里面差不多是这种形式。


$.get(url, function(data, status){
	$("#menu").html(data);
})

但是用下面代码执行的时候第二个函数取到的二级菜单被选中的选项还是初始值, 而不是前一个函数处理完的服务器传回来的值。


$(document).ready(function(){
  	update_data1();
  	update_data2();	
})

是需要对 callback 进行处理吗?查了一下 js 执行顺序,看到好多声明式函数跟赋值式函数的执行顺序,但感觉应该不是这种导致的吧? 求指教, 谢谢。

2706 次点击
所在节点    JavaScript
8 条回复
lonelinsky
2017-04-14 19:40:18 +08:00
把 update_data1 作为第一个下拉框的 onchange 回调函数,同理 update_data2 作为第二个下拉菜单的 onchange 回调函数
dingz
2017-04-14 19:40:22 +08:00
promise 串联
spoonwep
2017-04-14 19:57:29 +08:00
你需要 propromise 或者 async/await
cheerzeng
2017-04-14 20:03:25 +08:00
@lonelinsky
@dingz
@spoonwep 好的,我试试,谢谢啊!!
SourceMan
2017-04-14 20:10:37 +08:00
异步嘛
cuzfinal
2017-04-15 08:22:38 +08:00
setTimeOut(()=>{update_data2();},0)
zhangolve
2017-04-20 22:30:39 +08:00
看楼主的描述和使用 jQuery ,我感觉这个时候其实也没有必要像楼上几位说的,用 promise ,个人理解 promise 在控制多个异步请求并发或者是竞速,也就分别对应 promise.all 和 promise.race 还是很强大的,但是看楼主的描述,感觉既然是用了 jq ,直接再套一层,可能对楼主已经有了 jq 经验,无需学习 promise 更加快,而且同样能达到异步控制。

把以前写的个小例子改了改,可以看看。

https://codepen.io/zhangolve/pen/EmKKxB

可能说的不对,欢迎指出吧。
zhangolve
2017-04-20 22:35:34 +08:00
不过话说回来,我一看都六天前的帖子了,应该也都解决了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX