У меня много асинхронных функций в моей системе, поэтому мне нужно идти «асинхронно до конца», то есть до момента, когда создаются приложения http.Server
и express.Application
.
(Это неизбежно в асинхронной системе - будет много асинхронных подпрограмм, которые необходимы в конструкторах, что невозможно, и поэтому вместо этого нам нужно использовать асинхронные фабричные функции, которые приводят к асинхронному ползучести вплоть доточка входа.)
Но я не уверен в синтаксисе Node / TypeScript, который будет использоваться для начальной загрузки приложения.
Моя основная точка входа - System.ts
:
class default export System {
public constructor() {
// init Express.Application
// init http.Server
// init other parts of the system
}
public async start(): Promise<void> {
// start the system asynchronously
// start listening with http.Server
}
}
Тогда у меня есть модуль начальной загрузки Main.ts
:
import System from "./System"
const system = new System();
export default ???; // PROBLEM IS HERE
, который должен быть запущен:
node ./dist/Main.js
Но я не уверен, что использовать вэкспортная линия.Я попробовал все это:
export default await system.start(); // doesn't compile (obviously)
export default system.start(); // doesn't seem right
export default system.start().then(); // this works *maybe*
Последняя строка работает на основе теста на дым - но я не уверен, что это способ сделать это, и есть ли что-то в этой строке, что может дать сбой.
Каков канонический способ запуска приложения для асинхронных узлов?
ОБНОВЛЕНИЕ
Исходя из ответа @ JacobGillespie, модуль самозагрузки Main.ts
теперь:
import System from "./System"
new System().start().then();
//new System().start().catch(e => console.error(e)); // alternative
В моем случае System.ts
имеет обработчики для ошибок и необработанных обещаний, а также ведет протоколирование (в противном случае используйте строку «альтернативный»).Таким образом, модуль начальной загрузки просто загружает систему.