3
3
angular . module ( 'openshiftConsole' ) . controller ( 'OverviewController' , [
4
4
'$scope' ,
5
5
'$filter' ,
6
+ '$q' ,
6
7
'$routeParams' ,
7
8
'AlertMessageService' ,
8
9
'APIService' ,
@@ -24,6 +25,7 @@ angular.module('openshiftConsole').controller('OverviewController', [
24
25
'OwnerReferencesService' ,
25
26
'PodsService' ,
26
27
'ProjectsService' ,
28
+ 'PromiseUtils' ,
27
29
'ResourceAlertsService' ,
28
30
'RoutesService' ,
29
31
'ServiceInstancesService' ,
@@ -32,6 +34,7 @@ angular.module('openshiftConsole').controller('OverviewController', [
32
34
33
35
function OverviewController ( $scope ,
34
36
$filter ,
37
+ $q ,
35
38
$routeParams ,
36
39
AlertMessageService ,
37
40
APIService ,
@@ -53,6 +56,7 @@ function OverviewController($scope,
53
56
OwnerReferencesService ,
54
57
PodsService ,
55
58
ProjectsService ,
59
+ PromiseUtils ,
56
60
ResourceAlertsService ,
57
61
RoutesService ,
58
62
ServiceInstancesService ) {
@@ -1336,46 +1340,69 @@ function OverviewController($scope,
1336
1340
// The canI check on watch should be temporary until we have a different solution for handling secret parameters
1337
1341
if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( serviceInstancesVersion , 'watch' ) ) {
1338
1342
1339
- // Get the service class for this instance.
1343
+ // Get the service class for this instance. Returns a promise.
1340
1344
fetchServiceClass = function ( instance ) {
1341
1345
var serviceClassName = ServiceInstancesService . getServiceClassNameForInstance ( instance ) ;
1342
1346
1347
+ var serviceClass = _ . get ( state , [ 'serviceClasses' , serviceClassName ] ) ;
1348
+ if ( serviceClass ) {
1349
+ return $q . when ( serviceClass ) ;
1350
+ }
1351
+
1343
1352
// Check if we already have the service class or if a request is already in flight.
1344
- if ( ! _ . has ( state , [ 'serviceClasses' , serviceClassName ] ) && ! serviceClassPromises [ serviceClassName ] ) {
1353
+ if ( ! serviceClassPromises [ serviceClassName ] ) {
1345
1354
serviceClassPromises [ serviceClassName ] = DataService . get ( serviceClassesVersion , serviceClassName , { } ) . then ( function ( serviceClass ) {
1346
1355
state . serviceClasses [ serviceClassName ] = serviceClass ;
1356
+ return serviceClass ;
1347
1357
} ) . finally ( function ( ) {
1348
1358
delete servicePlanPromises [ serviceClassName ] ;
1349
1359
} ) ;
1350
1360
}
1361
+
1362
+ return serviceClassPromises [ serviceClassName ] ;
1351
1363
} ;
1352
1364
1353
- // Get the service plan for this instance.
1365
+ // Get the service plan for this instance. Returns a promise.
1354
1366
fetchServicePlan = function ( instance ) {
1355
1367
var servicePlanName = ServiceInstancesService . getServicePlanNameForInstance ( instance ) ;
1356
1368
1357
1369
// Check if we already have the service plan or if a request is already in flight.
1358
- if ( ! _ . has ( state , [ 'servicePlans' , servicePlanName ] ) && ! servicePlanPromises [ servicePlanName ] ) {
1370
+ var servicePlan = _ . get ( state , [ 'servicePlans' , servicePlanName ] ) ;
1371
+ if ( servicePlan ) {
1372
+ return $q . when ( servicePlan ) ;
1373
+ }
1374
+
1375
+ if ( ! servicePlanPromises [ servicePlanName ] ) {
1359
1376
servicePlanPromises [ servicePlanName ] = DataService . get ( servicePlansVersion , servicePlanName , { } ) . then ( function ( servicePlan ) {
1360
1377
state . servicePlans [ servicePlanName ] = servicePlan ;
1378
+ return servicePlan ;
1361
1379
} ) . finally ( function ( ) {
1362
1380
delete servicePlanPromises [ servicePlanName ] ;
1363
1381
} ) ;
1364
1382
}
1383
+
1384
+ return servicePlanPromises [ servicePlanName ] ;
1365
1385
} ;
1366
1386
1367
1387
watches . push ( DataService . watch ( serviceInstancesVersion , context , function ( serviceInstances ) {
1368
1388
state . serviceInstances = serviceInstances . by ( 'metadata.name' ) ;
1389
+
1390
+ var promises = [ ] ;
1369
1391
_ . each ( state . serviceInstances , function ( instance ) {
1370
1392
var notifications = ResourceAlertsService . getServiceInstanceAlerts ( instance ) ;
1371
1393
setNotifications ( instance , notifications ) ;
1372
1394
1373
- fetchServiceClass ( instance ) ;
1374
- fetchServicePlan ( instance ) ;
1395
+ promises . push ( fetchServiceClass ( instance ) ) ;
1396
+ promises . push ( fetchServicePlan ( instance ) ) ;
1397
+ } ) ;
1398
+
1399
+ // Wait for all promises to complete before trying to sort the
1400
+ // instances and check bindability.
1401
+ PromiseUtils . waitForAll ( promises ) . finally ( function ( ) {
1402
+ sortServiceInstances ( ) ;
1403
+ updateFilter ( ) ;
1375
1404
} ) ;
1376
- sortServiceInstances ( ) ;
1377
1405
updateLabelSuggestions ( state . serviceInstances ) ;
1378
- updateFilter ( ) ;
1379
1406
} , { poll : limitWatches , pollInterval : DEFAULT_POLL_INTERVAL } ) ) ;
1380
1407
}
1381
1408
0 commit comments