From 53239ff048fb0ac041d94a16edd4459c3bb0af4d Mon Sep 17 00:00:00 2001 From: Harry Hedger Date: Wed, 16 Mar 2016 01:09:33 -0400 Subject: [PATCH] Multipart upload() now returns promise correctly. --- src/core/Core.js | 10 +++++-- src/plugins/Multipart.js | 65 +++++++++++++++++++++------------------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/core/Core.js b/src/core/Core.js index d81b69726..c729f429d 100644 --- a/src/core/Core.js +++ b/src/core/Core.js @@ -169,8 +169,14 @@ export default class Core { .map(type => this.runType.bind(this, type, method)) // Run waterfall of typeMethods return Utils.promiseWaterfall(typeMethods) - .then(result => result) - .catch(error => console.error(error)) + .then(result => { + if (result[0] !== undefined) { + this.log(result) + this.log('Upload result -> success!') + return result + } + }) + .catch(error => this.log('Upload result -> failed:', error)) }) } } diff --git a/src/plugins/Multipart.js b/src/plugins/Multipart.js index ab3ac80fc..c6c0173b7 100644 --- a/src/plugins/Multipart.js +++ b/src/plugins/Multipart.js @@ -36,40 +36,43 @@ export default class Multipart extends Plugin { } upload (files, current, total) { - var formPost = new FormData() + return new Promise((resolve, reject) => { + var formPost = new FormData() - // turn file into an array so we can use bundle - if (!this.opts.bundle) { - files = [files[current]] - } - - for (let i in files) { - formPost.append(this.opts.fieldName, files[i]) - } - - var xhr = new XMLHttpRequest() - xhr.open('POST', this.opts.endpoint, true) - - xhr.addEventListener('progress', (e) => { - var percentage = (e.loaded / e.total * 100).toFixed(2) - this.core.log(percentage) - // this.setProgress(percentage, current, total) - }) - - xhr.addEventListener('load', () => { - var upload = {} - if (this.opts.bundle) { - upload = {files: files} - } else { - upload = {file: files[current]} + // turn file into an array so we can use bundle + if (!this.opts.bundle) { + files = [files[current]] } - return Promise.resolve(upload) - }) - xhr.addEventListener('error', () => { - return Promise.reject('fucking error!') - }) + for (let i in files) { + formPost.append(this.opts.fieldName, files[i]) + } - xhr.send(formPost) + var xhr = new XMLHttpRequest() + xhr.open('POST', this.opts.endpoint, true) + + xhr.addEventListener('progress', (e) => { + var percentage = (e.loaded / e.total * 100).toFixed(2) + this.core.log(percentage) + // this.setProgress(percentage, current, total) + }) + + xhr.addEventListener('load', () => { + var upload = {} + if (this.opts.bundle) { + upload = {files: files} + } else { + upload = {file: files[current]} + } + + return resolve(upload) + }) + + xhr.addEventListener('error', () => { + return reject('fucking error!') + }) + + xhr.send(formPost) + }) } }