



























@@ -125,33 +125,36 @@ function resolveObserveOnlyDispatchResult<TDispatchResult>(
125125export async function dispatchAssembledChannelTurn(
126126params: AssembledChannelTurn,
127127): Promise<DispatchedChannelTurnResult> {
128-return await runPreparedChannelTurn({
129-channel: params.channel,
130-accountId: params.accountId,
131-routeSessionKey: params.routeSessionKey,
132-storePath: params.storePath,
133-ctxPayload: params.ctxPayload,
134-recordInboundSession: params.recordInboundSession,
135-record: params.record,
136-history: params.history,
137-admission: params.admission,
138-log: params.log,
139-messageId: params.messageId,
140-runDispatch: async () =>
141-await params.dispatchReplyWithBufferedBlockDispatcher({
142-ctx: params.ctxPayload,
143-cfg: params.cfg,
144-dispatcherOptions: {
145- ...params.dispatcherOptions,
146-deliver: async (payload: ReplyPayload, info) => {
147-await params.delivery.deliver(payload, info);
128+return await runPreparedChannelTurnCore(
129+{
130+channel: params.channel,
131+accountId: params.accountId,
132+routeSessionKey: params.routeSessionKey,
133+storePath: params.storePath,
134+ctxPayload: params.ctxPayload,
135+recordInboundSession: params.recordInboundSession,
136+record: params.record,
137+history: params.history,
138+admission: params.admission,
139+log: params.log,
140+messageId: params.messageId,
141+runDispatch: async () =>
142+await params.dispatchReplyWithBufferedBlockDispatcher({
143+ctx: params.ctxPayload,
144+cfg: params.cfg,
145+dispatcherOptions: {
146+ ...params.dispatcherOptions,
147+deliver: async (payload: ReplyPayload, info) => {
148+await params.delivery.deliver(payload, info);
149+},
150+onError: params.delivery.onError,
148151},
149-onError: params.delivery.onError,
150-},
151-replyOptions: params.replyOptions,
152- replyResolver: params.replyResolver,
153- }),
154-});
152+replyOptions: params.replyOptions,
153+ replyResolver: params.replyResolver,
154+}),
155+},
156+{ suppressObserveOnlyDispatch: false },
157+);
155158}
156159157160function isPreparedChannelTurn<TDispatchResult>(
@@ -170,24 +173,18 @@ async function dispatchResolvedChannelTurn<TDispatchResult>(
170173},
171174): Promise<DispatchedChannelTurnResult<TDispatchResult>> {
172175if (isPreparedChannelTurn(params)) {
173-return await runPreparedChannelTurn(
174-params.admission.kind === "observeOnly"
175- ? {
176- ...params,
177-runDispatch: async () => resolveObserveOnlyDispatchResult(params),
178-}
179- : params,
180-);
176+return await runPreparedChannelTurn(params);
181177}
182178return (await dispatchAssembledChannelTurn(
183179params,
184180)) as DispatchedChannelTurnResult<TDispatchResult>;
185181}
186182187-export async function runPreparedChannelTurn<
183+async function runPreparedChannelTurnCore<
188184TDispatchResult = DispatchedChannelTurnResult["dispatchResult"],
189185>(
190186params: PreparedChannelTurn<TDispatchResult>,
187+options: { suppressObserveOnlyDispatch: boolean },
191188): Promise<DispatchedChannelTurnResult<TDispatchResult>> {
192189const admission = params.admission ?? ({ kind: "dispatch" } as const);
193190emit({
@@ -253,7 +250,10 @@ export async function runPreparedChannelTurn<
253250});
254251let dispatchResult: TDispatchResult;
255252try {
256-dispatchResult = await params.runDispatch();
253+dispatchResult =
254+options.suppressObserveOnlyDispatch && admission.kind === "observeOnly"
255+ ? resolveObserveOnlyDispatchResult(params)
256+ : await params.runDispatch();
257257} catch (err) {
258258emit({
259259 ...params,
@@ -289,6 +289,14 @@ export async function runPreparedChannelTurn<
289289};
290290}
291291292+export async function runPreparedChannelTurn<
293+TDispatchResult = DispatchedChannelTurnResult["dispatchResult"],
294+>(
295+params: PreparedChannelTurn<TDispatchResult>,
296+): Promise<DispatchedChannelTurnResult<TDispatchResult>> {
297+return await runPreparedChannelTurnCore(params, { suppressObserveOnlyDispatch: true });
298+}
299+292300export async function runChannelTurn<
293301TRaw,
294302TDispatchResult = DispatchedChannelTurnResult["dispatchResult"],
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。