# How to know when upload is done with waitForEncoding: true?

**URL:** <https://community.transloadit.com/t/how-to-know-when-upload-is-done-with-waitforencoding-true/15387>\
**Category:** Transloadit\
**Created:** [August 13, 2020, 1:46am UTC](https://community.transloadit.com/t/how-to-know-when-upload-is-done-with-waitforencoding-true/15387 "2020-08-13T01:46:57Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![dev.video0](https://avatars.discourse-cdn.com/v4/letter/d/ad7895/32.png) [@dev.video0](https://community.transloadit.com/u/dev.video0)\
**Post date:** [August 13, 2020, 12:03pm UTC](https://community.transloadit.com/t/how-to-know-when-upload-is-done-with-waitforencoding-true/15387/3 "2020-08-13T12:03:06Z")

</div>

Hi, thanks for the quick reply!

I did actually try `transloadit:assembly-executing` but I can’t seem to get it to fire. I’m wondering if something is wrong with my usage:

```
// "@uppy/core": "^1.12.2",
// "@uppy/react": "^1.10.2",
// "@uppy/transloadit": "^1.6.5",
// "@uppy/tus": "^1.7.3",

const id = 'image'; // there is another uploader on the page with id video
const uppy = new Uppy({id, debug: true});
const params = {/*transloadit params*/};
const fields = [/*meta field names*/];
uppy.use(Transloadit, {
  params,
  fields,
  waitForEncoding: true, // to enable transloadit:complete event
  waitForMetadata: false, // tried with this true too but no diff
});
uppy.addFile(watermarkFile);
uppy.addFile(imageFile);
const meta = {/*metadata*/};
uppy.setMeta({
  ...meta,
  watermark: watermarkFile,
  image: imageFile
});
uppy.on('*', function () {
  console.log('uppy event', this.event);
});
uppy.once('transloadit:assembly-executing', (assembly) => {
  // this never seems to fire
  // as the assembly_uploading_finished websocket message never seems to arrive
  // https://github.com/transloadit/uppy/blob/6f5de4211ca9c2ea9bf8da34b80a757c31773c63/packages/%40uppy/transloadit/src/Assembly.js#L103-L105
  console.log(assembly);
});
uppy.once('transloadit:complete', (assembly) => {
  // this does fire as expected
  console.log(assembly)
});
uppy.upload();

```

Looking closer, it seems that it never fires because the underlying `assembly_uploading_finished` message is never received on the websocket.

> <https://github.com/transloadit/uppy/blob/6f5de4211ca9c2ea9bf8da34b80a757c31773c63/packages/%40uppy/transloadit/src/Assembly.js#L103-L105>

The only websocket messages I see in the Network tab are:

```
assembly_connect
assembly_result_finished (for each step)
assembly_finished

```

I tried binding to the `state-update` event and I see that the assembly exists in `plugins.Transloadit.assemblies` and has `ok` set to `ASSEMBLY_EXECUTING` before the websocket connects.

I managed to get a hack kind-of working by looking for the first `state-update` that has `.ok == 'ASSEMBLY_EXECUTING'` but I realize there is another problem for my use-case when using `waitForEncoding: true` which is that I no longer get `upload-progress` events during the uploading. They do fire but it seems they are deferred until after the uploading has finished (?)

Here’s a log snippet that shows the order of events:

```
07:52:19.656 app.js:486 ******* upload
07:52:19.656 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:19.657 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:19.657 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:19.658 app.js:486 ******* preprocess-progress
07:52:19.658 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:19.659 app.js:486 ******* preprocess-progress
07:52:19.659 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:19.661 loggers.js:29 [Uppy] [07:52:19] [Transloadit] Create Assembly
07:52:20.661 app.js:495 state-update (nothing in plugins.Transloadit.assemblies)
07:52:20.661 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.662 app.js:486 ******* transloadit:assembly-created
07:52:20.662 loggers.js:29 [Uppy] [07:52:20] [Transloadit] Created Assembly 34109139229840228240c59242fed718
07:52:20.662 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.662 app.js:486 ******* preprocess-complete
07:52:20.663 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.663 app.js:486 ******* preprocess-complete
07:52:20.679 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.679 loggers.js:29 [Uppy] [07:52:20] [Tus] Uploading...
07:52:20.680 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.680 app.js:486 ******* upload-started
07:52:20.682 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.682 app.js:486 ******* upload-started
07:52:20.818 loggers.js:29 [Uppy] [07:52:20] [Transloadit] Socket is ready
07:52:20.903 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.904 app.js:486 ******* transloadit:result
07:52:20.941 loggers.js:29 [Uppy] [07:52:20] [Tus] Storing upload url
07:52:20.941 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.942 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.943 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:20.943 app.js:486 ******* progress
07:52:20.944 app.js:486 ******* upload-progress
07:52:21.014 loggers.js:29 [Uppy] [07:52:21] [Tus] Storing upload url
07:52:21.014 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:21.015 app.js:486 ******* upload-progress
07:52:21.066 app.js:486 ******* upload-progress
07:52:21.145 app.js:486 ******* upload-progress
07:52:21.360 app.js:486 ******* upload-progress
07:52:21.361 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718
07:52:21.361 app.js:492 state-update ASSEMBLY_EXECUTING 34109139229840228240c59242fed718

```

I’m not sure if this could be somehow related to the other question I posted here:

> [@Uppy says upload to Transloadit failed but it succeeded](https://community.transloadit.com/t/uppy-says-upload-to-transloadit-failed-but-it-succeeded/15386):
>
> Hi, I’m not sure if this is a usage problem or perhaps a bug in uppy or one of the plugins. I’m using Uppy with Transloadit and programmatically uploading two files to a single assembly. Everything works except Uppy mistakenly thinks the uploads are failing when they are actually succeeding. The error message appears to come from the Tus plugin and it seems to be due to the assembly being further along than expected. This error appears in the console: tus: unexpected response while creating…

Is there something I should change about my usage or is maybe a bug here?

Whew 🙂 thanks!

---

_[View the full topic](https://community.transloadit.com/t/how-to-know-when-upload-is-done-with-waitforencoding-true/15387)._
