Explorar el Código

companion-client: use promise chaining instead of wrapping (#2355)

* use promise chaining instead of wrapping

* fix test
* add fetch polyfill

* resolve logout promise after token have been removed
Dmitry Ivakhnenko hace 4 años
padre
commit
aca4bc1517

+ 1 - 0
packages/@uppy/aws-s3/src/index.test.js

@@ -1,3 +1,4 @@
+require('whatwg-fetch')
 const Core = require('@uppy/core')
 const AwsS3 = require('./')
 

+ 9 - 15
packages/@uppy/companion-client/src/Provider.js

@@ -18,13 +18,10 @@ module.exports = class Provider extends RequestClient {
   }
 
   headers () {
-    return new Promise((resolve, reject) => {
-      super.headers().then((headers) => {
-        this.getAuthToken().then((token) => {
-          resolve(Object.assign({}, headers, { 'uppy-auth-token': token }))
-        })
-      }).catch(reject)
-    })
+    return Promise.all([super.headers(), this.getAuthToken()])
+      .then(([headers, token]) =>
+        Object.assign({}, headers, { 'uppy-auth-token': token })
+      )
   }
 
   onReceiveResponse (response) {
@@ -58,14 +55,11 @@ module.exports = class Provider extends RequestClient {
   }
 
   logout () {
-    return new Promise((resolve, reject) => {
-      this.get(`${this.id}/logout`)
-        .then((res) => {
-          this.uppy.getPlugin(this.pluginId).storage.removeItem(this.tokenKey)
-            .then(() => resolve(res))
-            .catch(reject)
-        }).catch(reject)
-    })
+    return this.get(`${this.id}/logout`)
+      .then((response) => Promise.all([
+        response,
+        this.uppy.getPlugin(this.pluginId).storage.removeItem(this.tokenKey)
+      ])).then(([response]) => response)
   }
 
   static initPlugin (plugin, opts, defaultOpts) {

+ 45 - 53
packages/@uppy/companion-client/src/RequestClient.js

@@ -92,28 +92,26 @@ module.exports = class RequestClient {
   }
 
   preflight (path) {
-    return new Promise((resolve, reject) => {
-      if (this.preflightDone) {
-        return resolve(this.allowedHeaders.slice())
-      }
+    if (this.preflightDone) {
+      return Promise.resolve(this.allowedHeaders.slice())
+    }
 
-      fetch(this._getUrl(path), {
-        method: 'OPTIONS'
-      })
-        .then((response) => {
-          if (response.headers.has('access-control-allow-headers')) {
-            this.allowedHeaders = response.headers.get('access-control-allow-headers')
-              .split(',').map((headerName) => headerName.trim().toLowerCase())
-          }
-          this.preflightDone = true
-          resolve(this.allowedHeaders.slice())
-        })
-        .catch((err) => {
-          this.uppy.log(`[CompanionClient] unable to make preflight request ${err}`, 'warning')
-          this.preflightDone = true
-          resolve(this.allowedHeaders.slice())
-        })
+    return fetch(this._getUrl(path), {
+      method: 'OPTIONS'
     })
+      .then((response) => {
+        if (response.headers.has('access-control-allow-headers')) {
+          this.allowedHeaders = response.headers.get('access-control-allow-headers')
+            .split(',').map((headerName) => headerName.trim().toLowerCase())
+        }
+        this.preflightDone = true
+        return this.allowedHeaders.slice()
+      })
+      .catch((err) => {
+        this.uppy.log(`[CompanionClient] unable to make preflight request ${err}`, 'warning')
+        this.preflightDone = true
+        return this.allowedHeaders.slice()
+      })
   }
 
   preflightAndHeaders (path) {
@@ -132,58 +130,52 @@ module.exports = class RequestClient {
   }
 
   get (path, skipPostResponse) {
-    return new Promise((resolve, reject) => {
-      this.preflightAndHeaders(path).then((headers) => {
+    return this.preflightAndHeaders(path)
+      .then((headers) =>
         fetchWithNetworkError(this._getUrl(path), {
           method: 'get',
           headers: headers,
           credentials: 'same-origin'
-        })
-          .then(this._getPostResponseFunc(skipPostResponse))
-          .then((res) => this._json(res).then(resolve))
-          .catch((err) => {
-            err = err.isAuthError ? err : new Error(`Could not get ${this._getUrl(path)}. ${err}`)
-            reject(err)
-          })
-      }).catch(reject)
-    })
+        }))
+      .then(this._getPostResponseFunc(skipPostResponse))
+      .then((res) => this._json(res))
+      .catch((err) => {
+        err = err.isAuthError ? err : new Error(`Could not get ${this._getUrl(path)}. ${err}`)
+        return Promise.reject(err)
+      })
   }
 
   post (path, data, skipPostResponse) {
-    return new Promise((resolve, reject) => {
-      this.preflightAndHeaders(path).then((headers) => {
+    return this.preflightAndHeaders(path)
+      .then((headers) =>
         fetchWithNetworkError(this._getUrl(path), {
           method: 'post',
           headers: headers,
           credentials: 'same-origin',
           body: JSON.stringify(data)
-        })
-          .then(this._getPostResponseFunc(skipPostResponse))
-          .then((res) => this._json(res).then(resolve))
-          .catch((err) => {
-            err = err.isAuthError ? err : new Error(`Could not post ${this._getUrl(path)}. ${err}`)
-            reject(err)
-          })
-      }).catch(reject)
-    })
+        }))
+      .then(this._getPostResponseFunc(skipPostResponse))
+      .then((res) => this._json(res))
+      .catch((err) => {
+        err = err.isAuthError ? err : new Error(`Could not post ${this._getUrl(path)}. ${err}`)
+        return Promise.reject(err)
+      })
   }
 
   delete (path, data, skipPostResponse) {
-    return new Promise((resolve, reject) => {
-      this.preflightAndHeaders(path).then((headers) => {
+    return this.preflightAndHeaders(path)
+      .then((headers) =>
         fetchWithNetworkError(`${this.hostname}/${path}`, {
           method: 'delete',
           headers: headers,
           credentials: 'same-origin',
           body: data ? JSON.stringify(data) : null
-        })
-          .then(this._getPostResponseFunc(skipPostResponse))
-          .then((res) => this._json(res).then(resolve))
-          .catch((err) => {
-            err = err.isAuthError ? err : new Error(`Could not delete ${this._getUrl(path)}. ${err}`)
-            reject(err)
-          })
-      }).catch(reject)
-    })
+        }))
+      .then(this._getPostResponseFunc(skipPostResponse))
+      .then((res) => this._json(res))
+      .catch((err) => {
+        err = err.isAuthError ? err : new Error(`Could not delete ${this._getUrl(path)}. ${err}`)
+        return Promise.reject(err)
+      })
   }
 }