缘起

在项目中用到了extjs做后台页面展示,当时写了一个product 模块,在新增窗口里放了一个card布局器,里面有不同的表单,当然新增窗口还有保存,重置,关闭这三个按钮。

当时在保存时写了下面代码:

text : '保存',
disabled : true,
handler : function(){
    this.getFormValues();
    this.cleanFormValues();
},
scope : this

其中 getFormValues 函数里面激活了一个事件,用来提交表单值到后台。当时这么写一直提交失败,调了很久次仍未发现错误,偶然心想是不是清除值的问题,我将 cleanFormValues 函数注释掉,果然提交成功。

问题是解决了,但引发我猜想,我最初是以为多线程的原因,不然不能解释这个现象(程序肯定没有顺序执行)。后来在别人的提点下才知道 : JS 是单线程执行的,但为了提高效率,却有异步机制的出现(只怪自己是井底之蛙)。而extjs 封装了js,也是继承这种机制,故我之前那么写就会出问题。

之所以记录这篇,是明确更正自己对JS的误识。(虽说html5现在已经有了多线程,但现在没用到,就不在记录之列了)

参考链接:Javascript异步编程 - 阮一峰


mugbya
1.2k 声望41 粉丝

时间永远分岔,通往无数未来