写好表单校验所有的校验规则以后,首次校验一直是成功的,但是修改一个参数后校验就失败,promise回调一直是pending状态。
排查后发现,是在校验规则中使用了setTimeOut导致的,setTimeOut后再callback(),就造成了校验返回的peomise一直是pending状态无法获取成功或者是失败的返回。
因为promise是new出来后就马上执行的,初步猜想如果在校验规则中进行异步操作就会发生这样的事情:
执行到setTimeOut,因为是异步操作,跳过,此时还没有进行callback回调;
然后继续向下,校验规则返回了promise,因为没有callback,所以此时的promise是没有执行完毕的还是执行中的状态,所以是pending;
最后setTimeOut结束,执行callback,因为promise已经执行了,所以此时状态就还是pending,无法修改。
具体原因留待以后查阅源码