Node.js AsynclocalStorage Официальный пример: фактический заказ на выполнение отличается от документацииJavascript

Форум по Javascript
Ответить
Anonymous
 Node.js AsynclocalStorage Официальный пример: фактический заказ на выполнение отличается от документации

Сообщение Anonymous »

Описание проблемы
При изучении node.js asynclocalstorage я столкнулся с интересным расхождением. Официальная документация Node.js приводит пример с ожидаемым выводом, но когда я выполняю тот же код, я получаю другую последовательность.

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

const http = require('node:http');
const { AsyncLocalStorage } = require('node:async_hooks');

const asyncLocalStorage = new AsyncLocalStorage();

function logWithId(msg) {
const id = asyncLocalStorage.getStore();
console.log(`${id !== undefined ? id : '-'}:`, msg);
}

let idSeq = 0;
http.createServer((req, res) => {
asyncLocalStorage.run(idSeq++, () => {
logWithId('start');
// Imagine any chain of async operations here
setImmediate(() => {
logWithId('finish');
res.end();
});
});
}).listen(8081);

http.get('http://localhost:8081');
http.get('http://localhost:8081');
< /code>
Согласно документации, ожидаемый вывод должен быть: < /p>
0: start
1: start
0: finish
1: finish
< /code>
Однако, когда я запускаю этот точный код, я постоянно получаю: < /p>
0: start
0: finish
1: start
1: finish
< /code>
 Вопросы < /h2>

[*] Почему фактический порядок выполнения отличается от того, что описано в официальной документации? />  влияет ли это расхождение, как AsynclocalStorage < /code> следует использовать в реальных приложениях? setimmediate 
для отправки запросов после начала сервера
[*] Заменить Setimmediate с помощью SetTimeout
[*] Время задержки для контроля времени информации о запросах

. Версия: v20.18.3/v22.12.0
[*] Операционная система: macos/ubuntu

Я был бы признателен за любые идеи, которые объясняют эту поведенческую разницу и помогают мне понять базовые механики.

Подробнее здесь: https://stackoverflow.com/questions/795 ... ffers-from
Ответить

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

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

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

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

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