【发布时间】:2019-07-02 10:17:27
【问题描述】:
我的系统中有很多异步函数,所以我需要“一直向下异步”,即创建 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 有错误处理程序和未处理的承诺,并进行日志记录(否则使用“替代”行)。所以引导模块只是引导系统。
【问题讨论】:
标签: node.js typescript express async-await