Browse Source

tus,xhrupload: Replace promise-settle with own version

Renée Kooi 7 years ago
parent
commit
4d93e0ac85
5 changed files with 285 additions and 229 deletions
  1. 256 212
      package-lock.json
  2. 0 1
      package.json
  3. 25 10
      src/core/Utils.js
  4. 2 3
      src/plugins/Tus10.js
  5. 2 3
      src/plugins/XHRUpload.js

File diff suppressed because it is too large
+ 256 - 212
package-lock.json


+ 0 - 1
package.json

@@ -89,7 +89,6 @@
     "nanoraf": "3.0.1",
     "on-load": "3.2.0",
     "prettier-bytes": "1.0.4",
-    "promise-settle": "^0.3.0",
     "prop-types": "^15.5.10",
     "socket.io-client": "2.0.1",
     "tus-js-client": "^1.4.4",

+ 25 - 10
src/core/Utils.js

@@ -487,18 +487,33 @@ function _emitSocketProgress (uploader, progressData, file) {
 
 const emitSocketProgress = throttle(_emitSocketProgress, 300, {leading: true, trailing: true})
 
-function rejectIfAllRejected (promiseArray) {
+function settle (promises) {
+  const resolutions = []
   const rejections = []
-  promiseArray.forEach((result) => {
-    if (!result.isFulfilled()) {
-      rejections.push(result.reason())
+  function resolved (value) {
+    resolutions.push(value)
+  }
+  function rejected (error) {
+    rejections.push(error)
+  }
+
+  const wait = Promise.all(
+    promises.map((promise) => promise.then(resolved, rejected))
+  )
+
+  return wait.then(() => {
+    if (rejections.length === promises.length) {
+      // Very ad-hoc multiple-error reporting, should wrap this in a
+      // CombinedError or whatever kind of error class instead.
+      const error = rejections[0]
+      error.errors = rejections
+      return Promise.reject(error)
+    }
+    return {
+      successful: resolutions,
+      failed: rejections
     }
   })
-
-  if (rejections.length > 0) {
-    return Promise.reject(rejections[0])
-  }
-  return promiseArray
 }
 
 module.exports = {
@@ -527,5 +542,5 @@ module.exports = {
   findAllDOMElements,
   getSocketHost,
   emitSocketProgress,
-  rejectIfAllRejected
+  settle
 }

+ 2 - 3
src/plugins/Tus10.js

@@ -1,11 +1,10 @@
 const Plugin = require('./Plugin')
 const tus = require('tus-js-client')
-const settle = require('promise-settle')
 const UppySocket = require('../core/UppySocket')
 const {
   emitSocketProgress,
   getSocketHost,
-  rejectIfAllRejected
+  settle
 } = require('../core/Utils')
 require('whatwg-fetch')
 
@@ -340,7 +339,7 @@ module.exports = class Tus10 extends Plugin {
       }
     })
 
-    return settle(promises).then(rejectIfAllRejected)
+    return settle(promises)
   }
 
   handleUpload (fileIDs) {

+ 2 - 3
src/plugins/XHRUpload.js

@@ -1,10 +1,9 @@
 const Plugin = require('./Plugin')
-const settle = require('promise-settle')
 const UppySocket = require('../core/UppySocket')
 const {
   emitSocketProgress,
   getSocketHost,
-  rejectIfAllRejected
+  settle
 } = require('../core/Utils')
 
 module.exports = class XHRUpload extends Plugin {
@@ -192,7 +191,7 @@ module.exports = class XHRUpload extends Plugin {
       }
     })
 
-    return settle(promises).then(rejectIfAllRejected)
+    return settle(promises)
   }
 
   handleUpload (fileIDs) {

Some files were not shown because too many files changed in this diff