[問題] 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