How to wait for function call in Javascript without calling it directly

I have several functions that call each other asyncronously, and I need to catch a situation when last functionis called.
await statement supposes to call a function I should wait, but it is not to be called directly

function First(){
  console.log('First is called');
  setTimeout(Second(), 1000);
  return;
}

function Second(){
  console.log('Second is called');
}

function Main(){
  First();
  console.log('I called First and I want that Second also is complete');
}

I try to use await, but the problem is that I need to call function First() but should wait until Second is called. And including await in every call seems to be too complicated, since the chain length is quite large.

The solution could be an infinite loop in Main until Second initiate a variable, but I feel there should be more clear solution.