[问题] wait until change

楼主: oToToT (屁孩)   2018-07-19 00:06:53
最近在用node.js写一个小工具,他会去call某个api,然而似乎他那边有限制一定时间内
最多call几次,因此我自己写了个简单的cache(附一)。
可是发现当有多个人在差不多的时间连进来的时候,我还是会call很多次,因为前面call
的东西还没有存进cache里面(每call一次api约花费一秒),导致后来的人因为次数的上
限拿不到资料,想问有办法让我做到先注册一下我要放东西到cache,之后一拿到再分给
每个需要的人吗?
*附一
const MyCache = function() {
let dataStore = {}, CACHED_TIME = 600000;
return {
setCacheTime: function(time) {
CACHED_TIME = time;
},
check: function(key) {
if(typeof dataStore[key] === 'undefined') return false;
const curTime = new Date();
if(curTime - dataStore[key].updTime >= CACHED_TIME) {
delete dataStore[key];
return false;
}
return true;
},
get: function(key) {
return dataStore[key].value;
},
update: function(key, data) {
const curTime = new Date();
dataStore[key] = { 'updTime': curTime, 'value': data };
}
}
}
p.s. 不知道原生的Proxy可不可以做到setcahcetime之类的效果QQ
作者: mmis1000 (秋月恋枫)   2018-07-19 01:12:00
用 promise 阿,如果有 promise 你要资料时正在执行就大家一起等他一个把你的data直接换成promise,然后当成立刻成功就好
楼主: oToToT (屁孩)   2018-07-19 01:54:00
你是说get那边改成回传promise?可是我要怎么做到有东西的时候才回传?
作者: sa0124 ((恩恩))   2018-07-19 06:56:00
可以加async await 吗?
作者: y3k (激流を制するは静水)   2018-07-19 10:10:00
(async ()=>{}).then((async ()=>{}))(async ()=>{}).then(()=>(async ()=>{}))Promise.resolve({})Promise.All([])大概就这些吧
楼主: oToToT (屁孩)   2018-07-19 14:35:00
是说cache那边开个东东接Promise吗?
作者: eight0 (欸XD)   2018-07-19 23:34:00
楼主: oToToT (屁孩)   2018-07-20 00:55:00
感谢楼上,这种方式我也有想过,但其实有一部分是我自己又封装出一些功能(运算那个也有久),不太好统一(?会考虑看看

Links booklink

Contact Us: admin [ a t ] ucptt.com