Skip to content

Commit 7474c71

Browse files
committed
fix(scheduler): dont await for RUN_QRL chore
1 parent 3e78fae commit 7474c71

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

packages/qwik/src/core/shared/scheduler.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,17 @@ export const createScheduler = (
385385
case ChoreType.RUN_QRL:
386386
{
387387
const fn = (chore.$target$ as QRLInternal<(...args: unknown[]) => unknown>).getFn();
388-
returnValue = fn(...(chore.$payload$ as unknown[]));
388+
try {
389+
const result = retryOnPromise(() => fn(...(chore.$payload$ as unknown[])));
390+
if (isPromise(result)) {
391+
result.catch((error) => {
392+
emitEvent('qerror', { error });
393+
});
394+
}
395+
} catch (error) {
396+
emitEvent('qerror', { error });
397+
}
398+
returnValue = null;
389399
}
390400
break;
391401
case ChoreType.TASK:

packages/qwik/src/qwikloader.ts

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ export const qwikLoader = (
3333
const isConnected = 'isConnected';
3434
const qvisible = 'qvisible';
3535
const Q_JSON = '_qwikjson_';
36-
const MAX_RETRY_ON_PROMISE_COUNT = 100;
3736
const nativeQuerySelectorAll = (root: ParentNode, selector: string) =>
3837
Array.from(root.querySelectorAll(selector));
3938
const querySelectorAll = (query: string) => {
@@ -165,27 +164,19 @@ export const qwikLoader = (
165164
}
166165
const previousCtx = doc[Q_CONTEXT];
167166
if (element[isConnected]) {
168-
const handleEvent = async (retryCount = 0) => {
169-
try {
170-
doc[Q_CONTEXT] = [element, ev, url];
171-
isSync || emitEvent<QwikSymbolEvent>('qsymbol', { ...eventData });
172-
const results = handler(ev, element);
173-
// only await if there is a promise returned
174-
if (isPromise(results)) {
175-
await results;
176-
}
177-
} catch (error) {
178-
// retry if error is a promise. This means that probably a QRL is not resolved yet and we need to retry it.
179-
if (isPromise(error) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {
180-
error.then(() => handleEvent(retryCount++));
181-
} else {
182-
emitEvent('qerror', { error, ...eventData });
183-
}
184-
} finally {
185-
doc[Q_CONTEXT] = previousCtx;
167+
try {
168+
doc[Q_CONTEXT] = [element, ev, url];
169+
isSync || emitEvent<QwikSymbolEvent>('qsymbol', { ...eventData });
170+
const results = handler(ev, element);
171+
// only await if there is a promise returned
172+
if (isPromise(results)) {
173+
await results;
186174
}
187-
};
188-
handleEvent();
175+
} catch (error) {
176+
emitEvent('qerror', { error, ...eventData });
177+
} finally {
178+
doc[Q_CONTEXT] = previousCtx;
179+
}
189180
}
190181
}
191182
}

0 commit comments

Comments
 (0)