Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

CompositeDisposable.js 2.6 KiB

il y a 3 ans
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. 'use strict';
  2. exports.__esModule = true;
  3. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  4. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
  5. var _isDisposable = require('./isDisposable');
  6. var _isDisposable2 = _interopRequireDefault(_isDisposable);
  7. /**
  8. * Represents a group of disposable resources that are disposed together.
  9. */
  10. var CompositeDisposable = (function () {
  11. function CompositeDisposable() {
  12. for (var _len = arguments.length, disposables = Array(_len), _key = 0; _key < _len; _key++) {
  13. disposables[_key] = arguments[_key];
  14. }
  15. _classCallCheck(this, CompositeDisposable);
  16. if (Array.isArray(disposables[0]) && disposables.length === 1) {
  17. disposables = disposables[0];
  18. }
  19. for (var i = 0; i < disposables.length; i++) {
  20. if (!_isDisposable2['default'](disposables[i])) {
  21. throw new Error('Expected a disposable');
  22. }
  23. }
  24. this.disposables = disposables;
  25. this.isDisposed = false;
  26. }
  27. /**
  28. * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed.
  29. * @param {Disposable} item Disposable to add.
  30. */
  31. CompositeDisposable.prototype.add = function add(item) {
  32. if (this.isDisposed) {
  33. item.dispose();
  34. } else {
  35. this.disposables.push(item);
  36. }
  37. };
  38. /**
  39. * Removes and disposes the first occurrence of a disposable from the CompositeDisposable.
  40. * @param {Disposable} item Disposable to remove.
  41. * @returns {Boolean} true if found; false otherwise.
  42. */
  43. CompositeDisposable.prototype.remove = function remove(item) {
  44. if (this.isDisposed) {
  45. return false;
  46. }
  47. var index = this.disposables.indexOf(item);
  48. if (index === -1) {
  49. return false;
  50. }
  51. this.disposables.splice(index, 1);
  52. item.dispose();
  53. return true;
  54. };
  55. /**
  56. * Disposes all disposables in the group and removes them from the group.
  57. */
  58. CompositeDisposable.prototype.dispose = function dispose() {
  59. if (this.isDisposed) {
  60. return;
  61. }
  62. var len = this.disposables.length;
  63. var currentDisposables = new Array(len);
  64. for (var i = 0; i < len; i++) {
  65. currentDisposables[i] = this.disposables[i];
  66. }
  67. this.isDisposed = true;
  68. this.disposables = [];
  69. this.length = 0;
  70. for (var i = 0; i < len; i++) {
  71. currentDisposables[i].dispose();
  72. }
  73. };
  74. return CompositeDisposable;
  75. })();
  76. exports['default'] = CompositeDisposable;
  77. module.exports = exports['default'];