Skip to content

Commit 2135c80

Browse files
author
Taras Mankovski
committed
refactor(k6): use withResolvers for websocket open handling
Replace raw Promise construction with Effection's withResolvers for idiomatic structured concurrency pattern.
1 parent 5b15a31 commit 2135c80

1 file changed

Lines changed: 5 additions & 10 deletions

File tree

k6/websocket/mod.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
type Stream,
3939
resource,
4040
createSignal,
41-
call,
41+
withResolvers,
4242
} from "effection";
4343

4444
// K6 WebSocket types - these match k6/experimental/websockets
@@ -189,17 +189,12 @@ export function useWebSocket(
189189

190190
// Track if we've opened
191191
let isOpen = false;
192-
let openResolve: (() => void) | null = null;
193-
let openReject: ((error: Error) => void) | null = null;
194-
const openPromise = new Promise<void>((resolve, reject) => {
195-
openResolve = resolve;
196-
openReject = reject;
197-
});
192+
const opened = withResolvers<void>();
198193

199194
// Set up event handlers using K6's callback style
200195
socket.onopen = () => {
201196
isOpen = true;
202-
openResolve?.();
197+
opened.resolve();
203198
};
204199

205200
socket.onmessage = (event?: K6MessageEvent) => {
@@ -217,7 +212,7 @@ export function useWebSocket(
217212
const errorMsg = event?.error ?? "Unknown WebSocket error";
218213
if (!isOpen) {
219214
// Connection failed
220-
openReject?.(new Error(`WebSocket connection failed: ${errorMsg}`));
215+
opened.reject(new Error(`WebSocket connection failed: ${errorMsg}`));
221216
}
222217
// Note: Error during operation will close the socket,
223218
// which will close the message signal
@@ -246,7 +241,7 @@ export function useWebSocket(
246241

247242
try {
248243
// Wait for connection to open
249-
yield* call(() => openPromise);
244+
yield* opened.operation;
250245

251246
// Provide the resource
252247
yield* provide(wsResource);

0 commit comments

Comments
 (0)