首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript >解复用/缓存承诺函数调用

Javascript >解复用/缓存承诺函数调用
EN

Stack Overflow用户
提问于 2018-09-12 07:48:02
回答 1查看 116关注 0票数 0

问题:

我目前正在使用socket.io (服务器端)来处理来自客户端的异步请求。这些请求正被传递到上游服务-这是相当昂贵/缓慢和速度有限的服务。我想解复用/缓存对上游业务的调用。,例如 10x调用getUserProfile(123) => 1x对上游业务的调用(在一段时间内)

  1. 我尝试过使用缓存(lru-缓存),但是在从上游服务器获得响应之前(在毫秒内)从客户端接收了许多调用(对于第一次调用--因此这是行不通的)。
  2. 借出-承诺库听起来像我所需要的,但是它没有考虑不同的参数(例如, getUserProfile(123)getUserProfile(456) =>,期待profile_123profile_456,但是返回profile_456 (两次)。

最好我举个例子..。

server.js

代码语言:javascript
复制
// on request from client...
socket.on('getUserProfileRequest', userId => {
    getUserProfile(userId).then(profile => socket.emit('getUserProfileResponse', profile))
})

...

function getUserProfile(userId) {
    // ... call upstream server, do async work, return a Promise...
}
EN

回答 1

Stack Overflow用户

发布于 2018-09-13 06:15:23

最后,我将lru-cachemaxAgePromises结合使用,以获得所需的结果--我还向get(key, initialiseFn)函数添加了一个initialiseFn参数,以方便这一点。

PR: https://github.com/isaacs/node-lru-cache/pull/132

代码语言:javascript
复制
// setup an LRU cache (with eviction policy)...
const PROFILE_CACHE = LRU({ max: 50, maxAge: 1000 * 60 })

// receives "lots" of async requests from a client...
socket.on('getUserProfileRequest', userId => {
  PROFILE_CACHE.get(userId, () => getUserProfile(userId))
    .then(profile => socket.emit('getUserProfileResponse', profile))
})

// calls upstream server, does async/expensive/long running work, returns a Promise...
function getUserProfile(userId) { /* ... */ }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52290043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档