首页 > 解决方案 > 使用 continuation-local-storage 时如何解决承诺?

问题描述

continuation-local-storage似乎被使用,也在 express 的上下文中。

然而,非常基本的用法对我不起作用,因为上下文完全丢失了!

var createNamespace = require('continuation-local-storage').createNamespace;
var session = createNamespace('my session');


async function doAsync() {
    console.log('Before getting into the promise: ' + session.get('test'));
    await Promise.resolve();
    console.log('*in* the promise: ' + session.get('test'));
}

session.run(() => {
    session.set('test', 'peekaboo');
    doAsync();
});

结果是:

$ node server_test.js 
Before getting into the promise: peekaboo
*in* the promise: undefined

我做错了什么还是 CLS 只是坏了?还是图书馆坏了?如果它不打算与 Promise 一起使用,是否还有其他概念可以作为 threadLocal 存储以正确的方式实现多租户?

标签: javascriptnode.jspromisecontinuation-local-storage

解决方案


cls-hooked似乎工作正常,尽管该库(如上一个)是两年前最后一次更新的......

如果有人有其他更强大的方法来实现多租户的线程本地状态,请分享!


推荐阅读