Ben*_*Ben 7 javascript memoization promise
如何记忆基于承诺的功能?
直截了当的功能记忆就够了吗?
function foo() {
return new Promise((resolve, reject) => {
doSomethingAsync({ success: resolve, fail: reject });
});
};
Run Code Online (Sandbox Code Playgroud)
这样就够了吗?
var fooMemoized = memoize(foo);
Run Code Online (Sandbox Code Playgroud)
注意:此问题已更新,以删除延迟反模式.
Ber*_*rgi 12
是的,这就足够了.Promise是简单的返回值,这是它们的巨大好处 - 与回调相比,memoisation代码会很糟糕.
如果您的诺言库确实支持某种取消,您可能只想确保备忘的承诺是无法撤销的.另请注意,这种形式的记忆也会记住拒绝,因此您无法通过"再次尝试"来从错误中恢复.
对于Promise,简单的同步备忘会不好用,因为在大多数情况下,您不希望记录错误(已拒绝的Promise)。
我为常见需求做了一个简单的库:https : //github.com/nodeca/promise-memoize
伪代码:
let db = require('mongoose').createConnection('mongodb://localhost/forum');
function lastPosts(limit) {
return db.model('Post').find()
.limit(limit).orderBy('-_id').lean(true).exec(); // <- Promise (thenable)
}
let cachedLastPosts = require('promise-memoize')(lastPosts, { maxAge: 60000 });
// Later...
cachedLastPosts(10).then(posts => console.log(posts));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5203 次 |
| 最近记录: |