@@ -26,6 +26,7 @@ const resolveClusterTime = require('../topologies/shared').resolveClusterTime;
26
26
const SrvPoller = require ( './srv_polling' ) . SrvPoller ;
27
27
const getMMAPError = require ( '../topologies/shared' ) . getMMAPError ;
28
28
const makeStateMachine = require ( '../utils' ) . makeStateMachine ;
29
+ const eachAsync = require ( '../utils' ) . eachAsync ;
29
30
30
31
// Global state
31
32
let globalTopologyCounter = 0 ;
@@ -360,31 +361,22 @@ class Topology extends EventEmitter {
360
361
// defer state transition because we may need to send an `endSessions` command above
361
362
stateTransition ( this , STATE_CLOSING ) ;
362
363
363
- const servers = this . s . servers ;
364
- if ( servers . size === 0 ) {
365
- stateTransition ( this , STATE_CLOSED ) ;
366
- if ( typeof callback === 'function' ) {
367
- callback ( null , null ) ;
368
- }
364
+ eachAsync (
365
+ Array . from ( this . s . servers . values ( ) ) ,
366
+ ( server , cb ) => destroyServer ( server , this , options , cb ) ,
367
+ ( ) => {
368
+ this . s . servers . clear ( ) ;
369
369
370
- return ;
371
- }
370
+ // emit an event for close
371
+ this . emit ( 'topologyClosed' , new monitoring . TopologyClosedEvent ( this . s . id ) ) ;
372
372
373
- // destroy all child servers
374
- let destroyed = 0 ;
375
- servers . forEach ( server =>
376
- destroyServer ( server , this , options , ( ) => {
377
- destroyed ++ ;
378
- if ( destroyed === servers . size ) {
379
- // emit an event for close
380
- this . emit ( 'topologyClosed' , new monitoring . TopologyClosedEvent ( this . s . id ) ) ;
381
-
382
- stateTransition ( this , STATE_CLOSED ) ;
383
- if ( typeof callback === 'function' ) {
384
- callback ( null , null ) ;
385
- }
373
+ stateTransition ( this , STATE_CLOSED ) ;
374
+ this . emit ( 'close' ) ;
375
+
376
+ if ( typeof callback === 'function' ) {
377
+ callback ( ) ;
386
378
}
387
- } )
379
+ }
388
380
) ;
389
381
}
390
382
@@ -942,7 +934,6 @@ function createAndConnectServer(topology, serverDescription) {
942
934
server . once ( 'connect' , serverConnectEventHandler ( server , topology ) ) ;
943
935
server . on ( 'descriptionReceived' , topology . serverUpdateHandler . bind ( topology ) ) ;
944
936
server . on ( 'error' , serverErrorEventHandler ( server , topology ) ) ;
945
- server . on ( 'close' , ( ) => topology . emit ( 'close' , server ) ) ;
946
937
server . connect ( ) ;
947
938
return server ;
948
939
}
0 commit comments