请教一下JS的执行顺序问题

yingju3507 2021-04-30 09:34:41
onsubmit="return check()"
有个想法在表单提交后执行两个函数recStop()和recUpload()。
结果发现不管我设置是否延时,recstop都没有执行完,recUpload就执行了,能否控制recstop运行完了再执行recUpload呢?
function check() {
recStop();

// recUpload();
setTimeout(recUpload(),6000);
XXX
}
...全文
596 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2021-05-13
  • 打赏
  • 举报
回复
另外就是,js是线性执行顺序,如果在执行过程中抛出异常了,则js执行就会终止,检查你代码中是否有抛出异常,打开控制台看看
文盲老顾 2021-05-13
  • 打赏
  • 举报
回复
js 是事件驱动的处理机制,js语句本身是线性程序,但执行发起却不是 例如 onsubmit="recStop();recUpload;return check()" 他一定是先执行 recStop方法,然后执行recUpload方法,最后执行check并将结果返回 但是,如果在执行的方法中,存在异步的事件,那么就不一定是期待的顺序了 例如 function recStop(){ console.log('执行recStop') setTimeout(function(){console.log('6秒后弹出的信息')},6000); } function recUpload(){ console.log('执行recUpload') $.ajax({....success:function(){console.log('异步请求的信息')}}) } function check(){ console.log('执行check') return false; } 那么,必定先输出“执行recStop”,开启一个新的定时线程,然后输出“执行recUpload”,开启一个新的异步线程,再然后输出“执行check”,最后返回结果false 定时线程和异步线程是同时进行的,如果异步请求速度快,6秒内结束,先输出“异步请求的信息”,否则6秒是先输出“6秒后弹出的信息” 在存在异步、定时等事件触发线程的情况下,要严格按照执行期待的顺序,那就需要将方法作为参数传递进去,在函数执行完成后调用参数中的方法,比如success时执行下一步
我爱小仙女 2021-05-10
  • 打赏
  • 举报
回复
用promise吧,不要把两个函数写到一起,尽量保证一个函数只解决一件事情
hhsacsb 2021-05-09
  • 打赏
  • 举报
回复
把这两个函数里的事情,写到一个函数里去吧
qq_40262972 2021-04-30
  • 打赏
  • 举报
回复
你可以把 recUpload 传入到recStop中去,在recStop执行完后执行recUpload ,
Proud lion 2021-04-30
  • 打赏
  • 举报
回复
用promise 或者 把第二个函数当做参数传递给第一个也就是回调

87,907

社区成员

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

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