我正在尝试使用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.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。