Javascript 连续本地存储在等待/异步调用后丢失值?

Javascript 连续本地存储在等待/异步调用后丢失值?,javascript,async-await,continuation-local-storage,Javascript,Async Await,Continuation 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.se

我试图使用它来保存一些上下文值,直到完成几个(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
因此,在第一次使用
await
调用
async
函数后,我的值丢失,未定义。如何在
异步
函数调用上使用
连续本地存储
进行多个
等待
,而不丢失在
连续本地存储
上设置的值

更新

查看它推荐使用的Github版本。

更新


查看此Github问题,它建议使用cls hooked。

更新以在2021年4月回答

在此再加上一点,如果您使用的是node 12.17.0或13.10.0及以上版本,最好使用本机
AsyncLocalStorage
,它比cls hooked快得多

我还编写了一个cls hooked的替代方案,它为使用node v8.12.0及更高版本的用户提供了一个一致的API,用于
AsyncLocalStorage
。我的实现与cls hooked稍有不同,速度稍快,并且修复了一些当前的bug

这里有一个小的微基准

你可以看看这里。