|
@@ -563,9 +563,8 @@ class Uppy {
|
|
|
const { hasOwnProperty } = Object.prototype
|
|
|
|
|
|
const errors = []
|
|
|
- const fileIDs = Object.keys(files)
|
|
|
- for (let i = 0; i < fileIDs.length; i++) {
|
|
|
- const file = this.getFile(fileIDs[i])
|
|
|
+ for (const fileID of Object.keys(files)) {
|
|
|
+ const file = this.getFile(fileID)
|
|
|
for (let i = 0; i < requiredMetaFields.length; i++) {
|
|
|
if (!hasOwnProperty.call(file.meta, requiredMetaFields[i]) || file.meta[requiredMetaFields[i]] === '') {
|
|
|
const err = new RestrictionError(`${this.i18n('missingRequiredMetaFieldOnFile', { fileName: file.name })}`)
|
|
@@ -1585,28 +1584,22 @@ class Uppy {
|
|
|
*
|
|
|
* @private
|
|
|
*/
|
|
|
- #runUpload (uploadID) {
|
|
|
- const uploadData = this.getState().currentUploads[uploadID]
|
|
|
- const restoreStep = uploadData.step
|
|
|
+ async #runUpload (uploadID) {
|
|
|
+ let { currentUploads } = this.getState()
|
|
|
+ let currentUpload = currentUploads[uploadID]
|
|
|
+ const restoreStep = currentUpload.step || 0
|
|
|
|
|
|
const steps = [
|
|
|
...this.#preProcessors,
|
|
|
...this.#uploaders,
|
|
|
...this.#postProcessors,
|
|
|
]
|
|
|
- let lastStep = Promise.resolve()
|
|
|
- steps.forEach((fn, step) => {
|
|
|
-
|
|
|
- if (step < restoreStep) {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- lastStep = lastStep.then(() => {
|
|
|
- const { currentUploads } = this.getState()
|
|
|
- const currentUpload = currentUploads[uploadID]
|
|
|
+ try {
|
|
|
+ for (let step = restoreStep; step < steps.length; step++) {
|
|
|
if (!currentUpload) {
|
|
|
- return
|
|
|
+ break
|
|
|
}
|
|
|
+ const fn = steps[step]
|
|
|
|
|
|
const updatedUpload = {
|
|
|
...currentUpload,
|
|
@@ -1622,25 +1615,20 @@ class Uppy {
|
|
|
|
|
|
|
|
|
|
|
|
- return fn(updatedUpload.fileIDs, uploadID)
|
|
|
- }).then(() => null)
|
|
|
- })
|
|
|
+ await fn(updatedUpload.fileIDs, uploadID)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- lastStep.catch((err) => {
|
|
|
+
|
|
|
+ currentUploads = this.getState().currentUploads
|
|
|
+ currentUpload = currentUploads[uploadID]
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
this.emit('error', err)
|
|
|
this.#removeUpload(uploadID)
|
|
|
- })
|
|
|
-
|
|
|
- return lastStep.then(() => {
|
|
|
-
|
|
|
- const { currentUploads } = this.getState()
|
|
|
- const currentUpload = currentUploads[uploadID]
|
|
|
- if (!currentUpload) {
|
|
|
- return
|
|
|
- }
|
|
|
+ throw err
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
+ if (currentUpload) {
|
|
|
|
|
|
|
|
|
|
|
@@ -1661,30 +1649,27 @@ class Uppy {
|
|
|
const files = currentUpload.fileIDs.map((fileID) => this.getFile(fileID))
|
|
|
const successful = files.filter((file) => !file.error)
|
|
|
const failed = files.filter((file) => file.error)
|
|
|
- this.addResultData(uploadID, { successful, failed, uploadID })
|
|
|
- }).then(() => {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- const { currentUploads } = this.getState()
|
|
|
- if (!currentUploads[uploadID]) {
|
|
|
- return
|
|
|
- }
|
|
|
- const currentUpload = currentUploads[uploadID]
|
|
|
- const { result } = currentUpload
|
|
|
+ await this.addResultData(uploadID, { successful, failed, uploadID })
|
|
|
+
|
|
|
+
|
|
|
+ currentUploads = this.getState().currentUploads
|
|
|
+ currentUpload = currentUploads[uploadID]
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let result
|
|
|
+ if (currentUpload) {
|
|
|
+ result = currentUpload.result
|
|
|
this.emit('complete', result)
|
|
|
|
|
|
this.#removeUpload(uploadID)
|
|
|
-
|
|
|
-
|
|
|
- return result
|
|
|
- }).then((result) => {
|
|
|
- if (result == null) {
|
|
|
- this.log(`Not setting result for an upload that has been removed: ${uploadID}`)
|
|
|
- }
|
|
|
- return result
|
|
|
- })
|
|
|
+ }
|
|
|
+ if (result == null) {
|
|
|
+ this.log(`Not setting result for an upload that has been removed: ${uploadID}`)
|
|
|
+ }
|
|
|
+ return result
|
|
|
}
|
|
|
|
|
|
|