constructortypescriptasync-await

async constructor functions in TypeScript?


I have some setup I want during a constructor, but it seems that is not allowed

no async const

Which means I can't use:

await

How else should I do this?

Currently I have something outside like this, but this is not guaranteed to run in the order I want?

async function run() {
  let topic;
  debug("new TopicsModel");
  try {
    topic = new TopicsModel();
  } catch (err) {
    debug("err", err);
  }

  await topic.setup();

Solution

  • A constructor must return an instance of the class it 'constructs'. Therefore, it's not possible to return Promise<...> and await for it.

    You can:

    1. Make your public setup async.

    2. Do not call it from the constructor.

    3. Call it whenever you want to 'finalize' object construction.

      async function run() 
      {
          let topic;
          debug("new TopicsModel");
          try 
          {
              topic = new TopicsModel();
              await topic.setup();
          } 
          catch (err) 
          {
              debug("err", err);
          }
      }