Javascript 连续本地存储在等待/异步调用后丢失值?
我试图使用它来保存一些上下文值,直到完成几个(1-2)异步任务为止。下面是我的代码&它的示例输出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
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
这里有一个小的微基准
你可以看看这里。