UNPKG

node-web-mvc

Version:
48 lines (47 loc) 1.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * WorkerResourceRunner 可用于WorkerResourceResolver提供的workerJs * 在workerJs中可以使用当前类实例来运行请求交互 */ const worker_threads_1 = require("worker_threads"); const WorkerIncomingMessage_1 = __importDefault(require("./WorkerIncomingMessage")); const WorkerServerResponse_1 = __importDefault(require("./WorkerServerResponse")); class WorkerResourceRunner { constructor(...middlewares) { this.middlewares = middlewares; worker_threads_1.parentPort.on('message', this.onRequest.bind(this)); } async onRequest(info) { const port = info.port; try { const request = new WorkerIncomingMessage_1.default(info); const response = new WorkerServerResponse_1.default(request); await new Promise((resolve, reject) => { const middlewares = [ ...this.middlewares, // 404 () => port.postMessage({ type: 'finished' }), ]; const handler = middlewares.reverse().reduce((next, middleware) => { return () => { try { middleware(request, response, (ex) => (ex ? reject(ex) : next())); } catch (ex) { reject(ex); } }; }); handler(request, response, resolve); }); } catch (ex) { port.postMessage({ type: 'error', error: ex }); } } } exports.default = WorkerResourceRunner;