continuous-local-storage 介绍
简介
最近面试被问到知不知道 continuous-local-storage,特此查一查。
官方文档参见 github
本地连续存储的工作方式与线程编程中的本地线程存储类似,但是基于 Node 风格的回调链而不是线程。
可为函数调用链设置和获取你想要的值
例子
设编写一个模块,获取数据和渲染是两个不相干的函数,首先在获取用户数据的过程中 set
// setup.js
var createNamespace = require('continuation-local-storage').createNamespace;
var session = createNamespace('my session');
var db = require('./lib/db.js');
function start(options, next) {
db.fetchUserById(options.id, function (error, user) {
if (error) return next(error);
session.set('user', user);
next();
});
}
然后在渲染过程中其他方法里,可以获取之前 set 的值。
// send_response.js
var getNamespace = require('continuation-local-storage').getNamespace;
var session = getNamespace('my session');
var render = require('./lib/render.js')
function finish(response) {
var user = session.get('user');
render({user: user}).pipe(response);
}
在此线程内的其他函数里都可以去 get 拿到这个值。这可以解决在跨诸多函数时,数据可以获取同一份的问题,而非在往全局对象 Global 上挂载。