如何等待所有商店在ExtJs中同步?

Hos*_*ein 6 javascript extjs promise gridpanel extjs-stores

我有一个网格列表,可以由最终用户在表单中更改其数据.最后,我想通过单击按钮同步所有网格,然后执行操作.

我写了下面的代码:

$.when.apply(
    Ext.ComponentQuery.query('grid')
       .forEach(function(item) {
             if (item.getXType() == "grid") {
                if (item.store.getNewRecords().length > 0 || item.store.getUpdatedRecords().length > 0 || item.store.getRemovedRecords().length > 0) {
                    item.store.sync();
                 }
             }
})).then(function (results) {
    //do something
});
Run Code Online (Sandbox Code Playgroud)

问题在于store.sync()不等待回调.

这样做的推荐方法是什么?

Hos*_*ein 5

我这样做Promise

 // Sync grid data if exist dirty data
 Promise.all(
     Ext.ComponentQuery.query('grid')
     .map(grid => grid.getStore())
     .filter(s => (s.getNewRecords().length + s.getUpdatedRecords().length + s.getRemovedRecords().length) > 0)
     .map(s => new Promise((resolve, reject) => {
           s.sync({
               success: () => { resolve(); },
               failure: () => { reject(); }
           });
      }))
      ).then(() => {
           //do something
      });
Run Code Online (Sandbox Code Playgroud)