我怎么知道javascript方法何时结束

时间:2014-05-29 08:58:31

标签: javascript extjs4.2

我只是想学习Ext Js。 我有类似的东西:

    handler: function (checkBox, checked) {
                setLoading(true);

                grid1.filterExpired(checked);
                grid2.filterExpired(checked);
                grid3.filterExpired(checked);
                if (certain condition) {
                    me.recalculateSalesPayoutValues();
                    grid4.filterExpired(checked);
                }

                setLoading(false);
            }

    filterExpired: function (filter) {
            var me = this;
            if (filter) {
                me.store.filterBy(condition, me);
            } else {
                me.store.clearFilter();
            }
        }

问题是在内部方法结束计算之前隐藏加载掩码。我想只在所有内部方法完成时隐藏加载掩码。 我怎样才能做到这一点?我正在使用Ext Js 4.2.0

2 个答案:

答案 0 :(得分:1)

简单的解决方案是链接内部方法调用...所以anothermethod1将调用anothermethod2 ....并且最后是anothermethodN()。

所以移动" loadingMask.hide()"到最后一个内部方法将确保只有在执行所有方法时才会发生掩码/取消掩码。

答案 1 :(得分:1)

问题在于,当您显示加载掩码时,您(可能)会跳转到一些永远不会让UI更新的“繁忙进程”。因为JS从不放弃控制直到方法完成然后掩码隐藏,所以你永远不会在视觉上看到变化。简单的解决方案是在短暂的超时运行任务:

mask.show();
// Give the UI a chance to update
setTimeout(function() {
    method1();
    method2();
    mask.hide();
}, 1);