Mik*_*uso 7 javascript memoization node.js promise bluebird
Promise是我在Javascript中管理异步代码的首选方式.Memoize(memoizee on npm)是一个Javascript库,用于轻松缓存和预取功能结果.
理想情况下,我希望将两者中的优点结合起来,并且能够"过期"Promise并预先获取新的Promise结果(当缓存被触及并接近到期时).Memoize可以做到这一点,但它并没有考虑到Promise.
(我知道Promises有一个内置的"永远缓存",因为它们的性质,但对我的应用来说永远是太久了)
到目前为止,我做到这一点的最佳尝试如下(使用bluebird,memoize和underscore的 node.js示例):
var memoize = require('memoizee')
, Promise = require('bluebird')
, _ = require('underscore')
;
// returns a memoized Promise-generating function
function memoizePromiser(funcReturningPromise, options) {
var opts = _.defaults(options || {}, {async: true});
return Promise.promisify(memoize(function(){
var args = _.initial(arguments);
var cb = _.last(arguments);
funcReturningPromise.apply(this, args).nodeify(cb);
}, opts));
};
Run Code Online (Sandbox Code Playgroud)
这个函数将允许我记忆异步函数(具有类似节点的回调)返回一个promise,同时还提供Memoize库提供的所有缓存到期(+更多)功能.
然而,这种方法对我来说似乎很乱并且过度设计.我想我自己 - 这肯定是一个常见的问题,而其他人已经提出了更优雅的解决方案吗?
这是我尝试做的最好的方法吗?还有另一个像memoize这样专门为promises设计的库吗?我错过了一个更简单的解决方案吗?
任何指导将不胜感激.
这个函数将允许我记住一个返回承诺的异步函数(带有类似节点的回调)。然而,这种方法对我来说似乎很混乱并且过度设计。
是的 - 你已经有一个返回 Promise 的函数,没有理由返回到 Nodebacks。
有没有我错过的更简单的解决方案?
返回 Promise 的函数只是返回某个值的函数 - 可以由函数缓存的值memoize。简单地做
memoize(funcReturningPromise, options)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |