@@ -77,29 +77,42 @@ qx.Class.define("osparc.pricing.ServicesList", {
77
77
. then ( data => this . __populateList ( data ) ) ;
78
78
} ,
79
79
80
- __populateList : function ( services ) {
81
- // before accessing the metadata in a sync way, we need to bring them to the cache
82
- const metadataPromises = [ ] ;
83
- services . forEach ( service => {
80
+ __populateList : async function ( services ) {
81
+ const failedServices = [ ] ;
82
+ const servicePromises = services . map ( async service => {
84
83
const key = service [ "serviceKey" ] ;
85
84
const version = service [ "serviceVersion" ] ;
86
- metadataPromises . push ( osparc . store . Services . getService ( key , version ) ) ;
87
- } ) ;
88
- Promise . all ( metadataPromises )
89
- . catch ( err => console . error ( err ) )
90
- . finally ( ( ) => {
91
- const sList = [ ] ;
92
- services . forEach ( service => {
93
- const key = service [ "serviceKey" ] ;
94
- const version = service [ "serviceVersion" ] ;
95
- const serviceMetadata = osparc . store . Services . getMetadata ( key , version ) ;
96
- if ( serviceMetadata ) {
97
- sList . push ( new osparc . data . model . Service ( serviceMetadata ) ) ;
98
- }
85
+ try {
86
+ return await osparc . store . Services . getService ( key , version ) ;
87
+ } catch ( err ) {
88
+ console . error ( err ) ;
89
+ failedServices . push ( {
90
+ key : service [ "serviceKey" ] ,
91
+ version : service [ "serviceVersion" ] ,
99
92
} ) ;
100
- const servicesList = this . getChildControl ( "services-list" ) ;
101
- servicesList . setModel ( new qx . data . Array ( sList ) ) ;
102
- } )
93
+ return null ; // Return null to maintain array structure
94
+ }
95
+ } ) ;
96
+
97
+ const serviceModels = new qx . data . Array ( ) ;
98
+ // ensure that even if one request fails, the rest continue executing
99
+ const results = await Promise . allSettled ( servicePromises ) ;
100
+ results . forEach ( result => {
101
+ if ( result . status === "fulfilled" && result . value ) {
102
+ const serviceMetadata = result . value ;
103
+ serviceModels . push ( new osparc . data . model . Service ( serviceMetadata ) ) ;
104
+ }
105
+ } ) ;
106
+ const servicesList = this . getChildControl ( "services-list" ) ;
107
+ servicesList . setModel ( serviceModels ) ;
108
+
109
+ if ( failedServices . length ) {
110
+ let msg = "Could not retrieve data from some services:<br>" ;
111
+ failedServices . forEach ( failedService => {
112
+ msg += `- ${ failedService . key } :${ failedService . version } <br>` ;
113
+ } ) ;
114
+ osparc . FlashMessenger . logAs ( msg , "WARNING" ) ;
115
+ }
103
116
} ,
104
117
105
118
__openAddServiceToPlan : function ( ) {
0 commit comments