diff --git a/src/component/Uploader/UseUpload.js b/src/component/Uploader/UseUpload.js index 6024759..63f29f0 100644 --- a/src/component/Uploader/UseUpload.js +++ b/src/component/Uploader/UseUpload.js @@ -4,7 +4,7 @@ import { Status } from "./core/uploader/base"; export function useUpload(uploader) { const startTimeRef = useRef(null); const [status, setStatus] = useState(uploader.status); - const [error, setError] = useState(null); + const [error, setError] = useState(uploader.error); useEffect(() => { startTimeRef.current = Date.now(); /* eslint-disable @typescript-eslint/no-empty-function */ diff --git a/src/component/Uploader/core/uploader/base.ts b/src/component/Uploader/core/uploader/base.ts index 221f6be..8d2a437 100644 --- a/src/component/Uploader/core/uploader/base.ts +++ b/src/component/Uploader/core/uploader/base.ts @@ -72,11 +72,11 @@ export default abstract class Base { return; } + this.logger.info("Enqueued in manager pool"); this.manager.pool.enqueue(this).catch((e) => { this.logger.info("Upload task failed with error:", e); this.setError(e); }); - this.logger.info("Enqueued in manager pool"); }; public upload = async () => { diff --git a/src/component/Uploader/core/utils/pool.ts b/src/component/Uploader/core/utils/pool.ts index 0fe4ac7..4b00e7a 100644 --- a/src/component/Uploader/core/utils/pool.ts +++ b/src/component/Uploader/core/utils/pool.ts @@ -23,16 +23,23 @@ export class Pool { }); } + release(item: QueueContent) { + this.processing = this.processing.filter((v) => v !== item); + this.check(); + } + run(item: QueueContent) { this.queue = this.queue.filter((v) => v !== item); this.processing.push(item); item.uploader.upload().then( () => { - this.processing = this.processing.filter((v) => v !== item); item.resolve(); - this.check(); + this.release(item); }, - (err) => item.reject(err) + (err) => { + item.reject(err); + this.release(item); + } ); }