schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict';
 
const Aspect = require('./operation').Aspect;
const defineAspects = require('./operation').defineAspects;
const OperationBase = require('./operation').OperationBase;
 
class CloseOperation extends OperationBase {
  constructor(client, force) {
    super();
    this.client = client;
    this.force = force;
  }
 
  execute(callback) {
    const client = this.client;
    const force = this.force;
    const completeClose = err => {
      client.emit('close', client);
      for (const item of client.s.dbCache) {
        item[1].emit('close', client);
      }
 
      client.removeAllListeners('close');
      callback(err, null);
    };
 
    if (client.topology == null) {
      completeClose();
      return;
    }
 
    client.topology.close(force, err => {
      const autoEncrypter = client.topology.s.options.autoEncrypter;
      if (!autoEncrypter) {
        completeClose(err);
        return;
      }
 
      autoEncrypter.teardown(force, err2 => completeClose(err || err2));
    });
  }
}
 
defineAspects(CloseOperation, [Aspect.SKIP_SESSION]);
 
module.exports = CloseOperation;