I have this function which returns a promise as it's fetching asynchronously data. As you see there are watchers inside the code of that promise ($watchCollection) which keeps watching data and triggers the promise's resolve function for each change.
I can't test whether the then will triggers multiple times once for each resolve function call or not. Is this possible ?
this.getGridDataAndMetaData = function(viewId) {
return new Promise(function(resolve, reject) {
dataStore.fetchView(viewId)
.then(function(viewEntity) {
var grid_groupement = viewEntity.descriptor.state ? viewEntity.descriptor.state.grid_groupement : undefined;
var dataStoreEntities = viewEntity.getEntityType().getEntities();
var dataStoreProperties = viewEntity.getEntityType().getProperties();
var gridDataAndMetaData;
$rootScope.$watchCollection(function() {
return dataStoreEntities;
},
function(newCollection, oldCollection) {
if (!angular.equals(newCollection, {}))
formatDataStoreEntities(angular.copy(newCollection), grid_groupement)
.then(function(data) {
gridDataAndMetaData = data;
if (lastNewProperties != undefined && !angular.equals(lastNewProperties, [])) {
data.viewEntity = viewEntity;
data.grid_groupement = grid_groupement;
data.properties = lastNewProperties;
resolve(data);
}
});
});
$rootScope.$watchCollection(function() {
return dataStoreProperties;
},
function(newProperties, oldProperties) {
lastNewProperties = angular.copy(newProperties);
if (gridDataAndMetaData != undefined && !angular.equals(gridDataAndMetaData.valuesIdsEntitiesTabFormat, {})) {
generateServiceTabs(newProperties, function() {
data.viewEntity = viewEntity;
data.grid_groupement = grid_groupement;
data.properties = lastNewProperties;
resolve(data);
});
}
});
}).catch(function(error) {
console.error('%c getGridDataAndMetaData :: dataStore.fetchView(viewId):: error : ' + JSON.stringify(error), 'background: red; color: white; display: block;');
reject(error);
});
});
}