core: better executeMiddlewareStack trace

This commit is contained in:
undefined committed 2024-08-12 03:24:38 +08:00
1 parent 7c7258ec8b
commit 94d93d560a
2 files changed
+15 -10

No files matched your search

+14 -9
View File
@@ -287,17 +287,22 @@ class NotFoundHandler extends Handler {
all() { } all() { }
} }
async function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) { function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) {
const first = middlewares[0]; let index = -1;
if (!first) return Promise.resolve();
context.__timers ||= {}; context.__timers ||= {};
context.__timers[`${first.name}.start`] = Date.now(); async function dispatch(i) {
const next = () => executeMiddlewareStack(context, middlewares.slice(1)); if (i <= index) throw new Error('next() called multiple times');
try { index = i;
return await first.func(context, next); if (!middlewares[i]) return null;
} finally { const name = middlewares[i].name;
context.__timers[`${first.name}.end`] = Date.now(); context.__timers[`${name}.start`] = Date.now();
try {
return await middlewares[i].func(context, dispatch.bind(null, i + 1));
} finally {
context.__timers[`${name}.end`] = Date.now();
}
} }
return dispatch(0);
} }
interface WebServiceConfig { interface WebServiceConfig {
@@ -9,7 +9,7 @@ import Notification from 'vj/components/notification';
import { downloadProblemSet } from 'vj/components/zipDownloader'; import { downloadProblemSet } from 'vj/components/zipDownloader';
import { NamedPage } from 'vj/misc/Page'; import { NamedPage } from 'vj/misc/Page';
import { import {
addSpeculationRules, delay, i18n, pjax, request, setTemporaryViewTransitionNames, tpl, addSpeculationRules, delay, i18n, pjax, request, tpl,
} from 'vj/utils'; } from 'vj/utils';
const list = []; const list = [];