Ext.Deferred使用教程

Ext.Deferred使用教程

前几天写的,今天才贴出来。主要是Deferred的使用,这个需要与ES6的语法进行对比学习。

生成deferred

下面是个简单的例子,参考手册上新的。

deleteUserDevices:function(){
        var me=this;
        var deferred = new Ext.Deferred();
        if(!me.userDeviceList){
            return deferred.reject("未选择任何数据.");
        }
        var ids=Ext.Array.map(me.userDeviceList,function(item){
            return item.id;
        });
        Ext.Ajax.request({
            method:"DELETE",
            url:SHINEECALLHOST+'/api.php/records/hospital_user_devices/'+ids.join(),
            success: function(response, opts) {
                console.log(response.responseText);
                deferred.resolve();
            }
        });
        return deferred.promise;
    },

触发deferred

使用下面的方式,进行触发。注意参数形式,deleteUserDevices函数内部的this,需要根据第二个参数确定。

Ext.Deferred.sequence([me.deleteUserDevices,me.submitUserDevices],me);

使用感受

对于不需要异常捕捉的话,还不如直接传入一个函数参数进去。这样没有什么理解难度。即如下:

submitUserDevices:function(id,fn){
        var me=this;
        Ext.Ajax.request({
            method:"POST",
            params:{DeviceID:id,UserID:me.currentEditRecordId},
            url:SHINEECALLHOST+'/api.php/records/hospital_user_devices/',
            success: function(response, opts) {
                console.log(response.responseText);
		fn();//调用回调函数
            }
        });
    },

后来发现,删除、添加新的,之间没有严格的顺序依赖。