Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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