abort-signal.js 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const { addAbortListener } = require('../core/util')
  2. const { RequestAbortedError } = require('../core/errors')
  3. const kListener = Symbol('kListener')
  4. const kSignal = Symbol('kSignal')
  5. function abort (self) {
  6. if (self.abort) {
  7. self.abort()
  8. } else {
  9. self.onError(new RequestAbortedError())
  10. }
  11. }
  12. function addSignal (self, signal) {
  13. self[kSignal] = null
  14. self[kListener] = null
  15. if (!signal) {
  16. return
  17. }
  18. if (signal.aborted) {
  19. abort(self)
  20. return
  21. }
  22. self[kSignal] = signal
  23. self[kListener] = () => {
  24. abort(self)
  25. }
  26. addAbortListener(self[kSignal], self[kListener])
  27. }
  28. function removeSignal (self) {
  29. if (!self[kSignal]) {
  30. return
  31. }
  32. if ('removeEventListener' in self[kSignal]) {
  33. self[kSignal].removeEventListener('abort', self[kListener])
  34. } else {
  35. self[kSignal].removeListener('abort', self[kListener])
  36. }
  37. self[kSignal] = null
  38. self[kListener] = null
  39. }
  40. module.exports = {
  41. addSignal,
  42. removeSignal
  43. }