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 上挂载。

posted @ 2020-05-06 18:15  Ever-Lose  阅读(440)  评论(0编辑  收藏  举报