Selaa lähdekoodia

@uppy/xhr-upload: fix `Timed out waiting for socket` (#4150)

Fixes: https://github.com/transloadit/uppy/issues/3640
Co-authored-by: Merlijn Vos <merlijn@soverin.net>
Antoine du Hamel 2 vuotta sitten
vanhempi
commit
f752855699

+ 3 - 1
packages/@uppy/aws-s3/src/MiniXHRUpload.js

@@ -68,7 +68,7 @@ export default class MiniXHRUpload {
     this.uploaderEvents = Object.create(null)
     this.uploaderEvents = Object.create(null)
     this.i18n = opts.i18n
     this.i18n = opts.i18n
 
 
-    this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken)
+    this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken, { priority: -1 })
   }
   }
 
 
   #getOptions (file) {
   #getOptions (file) {
@@ -280,6 +280,7 @@ export default class MiniXHRUpload {
   }
   }
 
 
   async #uploadRemoteFile (file) {
   async #uploadRemoteFile (file) {
+    // TODO: we could rewrite this to use server-sent events instead of creating WebSockets.
     try {
     try {
       if (file.serverToken) {
       if (file.serverToken) {
         return this.connectToServerSocket(file)
         return this.connectToServerSocket(file)
@@ -321,6 +322,7 @@ export default class MiniXHRUpload {
 
 
           this.uppy.emit('upload-success', file, uploadResp)
           this.uppy.emit('upload-success', file, uploadResp)
           queuedRequest.done() // eslint-disable-line no-use-before-define
           queuedRequest.done() // eslint-disable-line no-use-before-define
+          socket.close()
           if (this.uploaderEvents[file.id]) {
           if (this.uploaderEvents[file.id]) {
             this.uploaderEvents[file.id].remove()
             this.uploaderEvents[file.id].remove()
             this.uploaderEvents[file.id] = null
             this.uploaderEvents[file.id] = null

+ 3 - 1
packages/@uppy/xhr-upload/src/index.js

@@ -131,7 +131,7 @@ export default class XHRUpload extends BasePlugin {
     }
     }
 
 
     this.uploaderEvents = Object.create(null)
     this.uploaderEvents = Object.create(null)
-    this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken)
+    this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken, { priority: -1 })
   }
   }
 
 
   getOptions (file) {
   getOptions (file) {
@@ -377,6 +377,7 @@ export default class XHRUpload extends BasePlugin {
   }
   }
 
 
   async uploadRemote (file) {
   async uploadRemote (file) {
+    // TODO: we could rewrite this to use server-sent events instead of creating WebSockets.
     try {
     try {
       this.uppy.emit('upload-started', file)
       this.uppy.emit('upload-started', file)
       if (file.serverToken) {
       if (file.serverToken) {
@@ -418,6 +419,7 @@ export default class XHRUpload extends BasePlugin {
 
 
           this.uppy.emit('upload-success', file, uploadResp)
           this.uppy.emit('upload-success', file, uploadResp)
           queuedRequest.done() // eslint-disable-line no-use-before-define
           queuedRequest.done() // eslint-disable-line no-use-before-define
+          socket.close()
           if (this.uploaderEvents[file.id]) {
           if (this.uploaderEvents[file.id]) {
             this.uploaderEvents[file.id].remove()
             this.uploaderEvents[file.id].remove()
             this.uploaderEvents[file.id] = null
             this.uploaderEvents[file.id] = null