Почему Atomics.waitAsync() внутри веб-работника приводит к зависанию Edge Runtime в промежуточном программном обеспечениJavascript

Форум по Javascript
Anonymous
Почему Atomics.waitAsync() внутри веб-работника приводит к зависанию Edge Runtime в промежуточном программном обеспечени

Сообщение Anonymous »

Я тестировал поведение Next.js 15 (App Router) при использовании Atomics.waitAsync() внутри веб-воркера, выполняемого из Edge Middleware.
Работник работает нормально в стандартной среде Node.js, но при выполнении под Next.js Edge Runtime он никогда не отвечает.
middleware.ts

Код: Выделить всё

import { NextResponse } from 'next/server';

export const config = {
matcher: '/api/:path*',
runtime: 'edge',
};

export async function middleware(req: Request) {
const worker = new Worker(new URL('./waiter.js', import.meta.url), { type: 'module' });
worker.postMessage('start');

const result = await new Promise((resolve) => {
worker.onmessage = (e) => resolve(e.data);
});

return NextResponse.json({ message: result });
}
waiter.js

Код: Выделить всё

const buffer = new SharedArrayBuffer(4);
const view = new Int32Array(buffer);

onmessage = async () => {
Atomics.store(view, 0, 0);
await Atomics.waitAsync(view, 0, 0).value; // ← hangs forever in Edge runtime
postMessage('done');
};
Когда я тестирую /api/test, запрос никогда не завершается.
Если я удаляю Atomics.waitAsync(), рабочий завершает работу нормально.
Вопрос
Почему использование Atomics.waitAsync() внутри веб-воркера приводит к зависанию Edge Runtime в промежуточном программном обеспечении Next.js 15 на неопределенный срок, и связано ли это с этим в Edge Runtime отсутствует поддержка ожидаемых атомов или как изолят Edge обрабатывает синхронизацию SharedArrayBuffer?

Подробнее здесь: https://stackoverflow.com/questions/798 ... me-in-next

Вернуться в «Javascript»