通过node.js使用Memoizee

我想在我的node.js后端使用Memoizee ,以加速请求。

但由于某种原因,我不能像我想要的那样工作。 我有一个路由,等待另一个方法的callback,但是不pipe我把结果保存到caching多久,它每次都运行整个方法。

我究竟做错了什么?

这是我的实现的一个例子。

var memoize = require('memoizee'); module.exports = function (app) { app.route('/someurl/:user_id') .get(function (req, res) { var user_id = req.params.user_id; memoized(user_id, function (result) { res.send(result) }) }); }; var doWork = memoize(function(user_id, done) { //Handling a lot of data - takes about 10-15 seconds done(index); }); var memoized = memoize(doWork, {maxAge: 300000}); 

有两个问题:

  1. 由于有两个函数参数,所以memoization会记住这两个参数。
    每次调用donecallback可能不同,因此每次都会看到函数重新运行。
    如何解决它? 首先,您可以通过在选项中传递{ length: 1 }来将memoization范围限制为第一个参数。 其次,我有一个概念,它是一个asynchronous函数,你试图记忆,因为它会更好地依赖memoizee中的asyncpromiseconfiguration选项(请参阅它的文档)

  2. 正如@Bergi指出你试图memoize已经memoized函数。 第二次记忆(与maxAge )没有效果,因为记忆内部检测你正在尝试做什么,并忽略第二次调用。 应该只有一个memoizee包装(选项可以结合,没有问题)。