Continuation-local-storage теряет значения после вызова await/async?

Я пытаюсь использовать continue-local-storage для сохранения некоторого значения контекста, пока не будут выполнены несколько ( 1-2) асинхронных задач. Ниже мой код и его пример вывода,

var request = require('request');
var cls = require('continuation-local-storage');


function main() {
    var writer = cls.createNamespace('test');
    writer.run(async function () {
        writer.set('key', 'test_value');
        console.log('cls value: ' + cls.getNamespace('test').get('key'));

        let r1 = await apiCall();
        console.log('cls value: ' + cls.getNamespace('test').get('key'));

        let r2 = await apiCall();
        console.log('cls value: ' + cls.getNamespace('test').get('key'));

        let r3 = await apiCall();
        console.log('cls value: ' + cls.getNamespace('test').get('key'));
      });
}

async function apiCall() {
    return await request.get('https://localhost:8080/');
}

main();

Результат вышеупомянутого app.js,

cls value: test_value
cls value: undefined
cls value: undefined
cls value: undefined

Итак, после первого звонка в async функция с использованием await, моя ценность потерялась, она не определена. Как мне использоватьcontinuation-local-storage для нескольких awaitна async вызовы функций без потери значения, установленного на continuation-local-storage?

Обновить

Ознакомьтесь с этой проблемой Github https://github.com/othiym23/node-continuation-local-storage/issues/133, он рекомендует использовать cls-hooked.

2 ответа

Обновить

Ознакомьтесь с этой проблемой Github https://github.com/othiym23/node-continuation-local-storage/issues/133, он рекомендует использовать cls-hooked.

Обновление для ответа на апрель 2021 г.

Просто чтобы добавить сюда, если вы используете узел 12.17.0 или 13.10.0 и выше, лучше использовать нативный, который намного быстрее, чем cls-hooked.

Я также написал альтернативу cls-hooked, которая предоставляет тем, кто использует узел версии 8.12.0 и выше, согласованный API для AsyncLocalStorage. Моя реализация немного отличается от cls-hooked и немного быстрее, а также исправляет некоторые текущие ошибки.

Небольшой микро-бенчмарк здесь https://github.com/Darkripper214/ALS-CLS-Benchmark

Вы можете посмотреть здесь. https://github.com/Darkripper214/ALS-Контекст

Другие вопросы по тегам