@@ -846,54 +846,67 @@ export default class Package {
846846 if ( ! this . dependencies . hasDependencies ) return result ( 200 ) ;
847847
848848 var res ,
849- updates = [ ] ;
849+ updates = [ ] ,
850+ promises = [ ] ;
850851
851- try {
852- for ( const dependency of this . dependencies ) {
853- if ( ! cache [ dependency . name ] ) {
854- const mutex = MUTEX_SET . get ( "outdated-dependencies/" + dependency . name ) ;
852+ for ( const dependency of this . dependencies ) {
853+ if ( cache [ dependency . name ] ) continue ;
854+
855+ const promise = async resolve => {
856+ const mutex = MUTEX_SET . get ( "outdated-dependencies/" + dependency . name ) ;
855857
856- if ( mutex . tryLock ( ) ) {
857- res = await this . npm . getPackageVersions ( dependency . name ) ;
858+ if ( mutex . tryLock ( ) ) {
859+ res = await this . npm . getPackageVersions ( dependency . name ) ;
858860
859- if ( res . ok ) {
860- let latest , next ;
861+ if ( res . ok ) {
862+ let latest , next ;
861863
862- for ( let version of res . data ) {
863- version = new SemanticVersion ( version ) ;
864+ for ( let version of res . data ) {
865+ version = new SemanticVersion ( version ) ;
866+
867+ if ( next ) {
868+ if ( version . gt ( next ) ) next = version ;
869+ }
870+ else {
871+ next = version ;
872+ }
864873
865- if ( next ) {
866- if ( version . gt ( next ) ) next = version ;
874+ if ( ! version . isPreRelease ) {
875+ if ( latest ) {
876+ if ( version . gt ( latest ) ) latest = version ;
867877 }
868878 else {
869- next = version ;
870- }
871-
872- if ( ! version . isPreRelease ) {
873- if ( latest ) {
874- if ( version . gt ( latest ) ) latest = version ;
875- }
876- else {
877- latest = version ;
878- }
879+ latest = version ;
879880 }
880881 }
881-
882- res = result ( 200 , {
883- latest,
884- next,
885- } ) ;
886882 }
887883
888- cache [ dependency . name ] = res ;
889-
890- mutex . unlock ( ) ;
891- }
892- else {
893- await mutex . wait ( ) ;
884+ res = result ( 200 , {
885+ latest,
886+ next,
887+ } ) ;
894888 }
889+
890+ cache [ dependency . name ] = res ;
891+
892+ mutex . unlock ( ) ;
895893 }
894+ else {
895+ await mutex . wait ( ) ;
896+ }
897+
898+ resolve ( ) ;
899+ } ;
896900
901+ promises . push ( new Promise ( resolve => promise ( resolve ) ) ) ;
902+ }
903+
904+ if ( promises . length ) {
905+ await Promise . all ( promises ) ;
906+ }
907+
908+ try {
909+ for ( const dependency of this . dependencies ) {
897910 res = cache [ dependency . name ] ;
898911 if ( ! res . ok ) throw res ;
899912
0 commit comments