@@ -517,29 +517,22 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
517517 this . #aiConfigurationTracing. reset ( ) ;
518518 }
519519
520- const secretResolutionPromises : Promise < void > [ ] = [ ] ;
521520 for ( const setting of loadedSettings ) {
522521 if ( isSecretReference ( setting ) ) {
523- if ( this . #secretRefreshEnabled) {
524- this . #secretReferences. push ( setting ) ;
525- }
522+ this . #secretReferences. push ( setting ) ; // cache secret references for resolve/refresh secret separately
526523 if ( this . #resolveSecretInParallel) {
527- // secret references are resolved asynchronously to improve performance
528- const secretResolutionPromise = this . #processKeyValue( setting )
529- . then ( ( [ key , value ] ) => {
530- keyValues . push ( [ key , value ] ) ;
531- } ) ;
532- secretResolutionPromises . push ( secretResolutionPromise ) ;
533524 continue ;
534525 }
535526 }
536527 // adapt configuration settings to key-values
537528 const [ key , value ] = await this . #processKeyValue( setting ) ;
538529 keyValues . push ( [ key , value ] ) ;
539530 }
540- if ( secretResolutionPromises . length > 0 ) {
541- // wait for all secret resolution promises to be resolved
542- await Promise . all ( secretResolutionPromises ) ;
531+
532+ if ( this . #resolveSecretInParallel) {
533+ await this . #resolveSecretsInParallel( this . #secretReferences, ( key , value ) => {
534+ keyValues . push ( [ key , value ] ) ;
535+ } ) ;
543536 }
544537
545538 this . #clearLoadedKeyValues( ) ; // clear existing key-values in case of configuration setting deletion
@@ -666,9 +659,20 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
666659 return Promise . resolve ( false ) ;
667660 }
668661
669- for ( const setting of this . #secretReferences) {
670- const [ key , value ] = await this . #processKeyValue( setting ) ;
671- this . #configMap. set ( key , value ) ;
662+ // if no cached key vault references, return
663+ if ( this . #secretReferences. length === 0 ) {
664+ return Promise . resolve ( false ) ;
665+ }
666+
667+ if ( this . #resolveSecretInParallel) {
668+ await this . #resolveSecretsInParallel( this . #secretReferences, ( key , value ) => {
669+ this . #configMap. set ( key , value ) ;
670+ } ) ;
671+ } else {
672+ for ( const setting of this . #secretReferences) {
673+ const [ key , value ] = await this . #processKeyValue( setting ) ;
674+ this . #configMap. set ( key , value ) ;
675+ }
672676 }
673677
674678 this . #secretRefreshTimer. reset ( ) ;
@@ -777,6 +781,24 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
777781 throw new Error ( "All fallback clients failed to get configuration settings." ) ;
778782 }
779783
784+ async #resolveSecretsInParallel( secretReferences : ConfigurationSetting [ ] , resultHandler : ( key : string , value : unknown ) => void ) : Promise < void > {
785+ if ( secretReferences . length === 0 ) {
786+ return ;
787+ }
788+
789+ const secretResolutionPromises : Promise < void > [ ] = [ ] ;
790+ for ( const setting of secretReferences ) {
791+ const secretResolutionPromise = this . #processKeyValue( setting )
792+ . then ( ( [ key , value ] ) => {
793+ resultHandler ( key , value ) ;
794+ } ) ;
795+ secretResolutionPromises . push ( secretResolutionPromise ) ;
796+ }
797+
798+ // Wait for all secret resolution promises to be resolved
799+ await Promise . all ( secretResolutionPromises ) ;
800+ }
801+
780802 async #processKeyValue( setting : ConfigurationSetting < string > ) : Promise < [ string , unknown ] > {
781803 this . #setAIConfigurationTracing( setting ) ;
782804
0 commit comments