看板 Ajax 關於我們 聯絡資訊
最近在用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 -- 我還沒說完吶~~ 夠多了夠多了,回家啦~!     \ /     ○     ︵ \○╱/|     . . ﹎ ﹍﹍ ╱ ̄﹚╱> (原PO被拖走了....) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.102.192 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1531930030.A.548.html
mmis1000: 用 promise 阿,如果有 promise 你要資料時正在執行 07/19 01:12
mmis1000: 就大家一起等他一個 07/19 01:12
mmis1000: 把你的data直接換成promise,然後當成立刻成功就好 07/19 01:13
oToToT: 你是說get那邊改成回傳promise?可是我要怎麼做到有東西的 07/19 01:54
oToToT: 時候才回傳? 07/19 01:54
sa0124: 可以加async await 嗎? 07/19 06:56
y3k: (async ()=>{}).then((async ()=>{})) 07/19 10:10
y3k: (async ()=>{}).then(()=>(async ()=>{})) 07/19 10:10
y3k: Promise.resolve({}) 07/19 10:35
y3k: Promise.All([]) 07/19 10:35
y3k: 大概就這些吧 07/19 10:36
y3k: 另外cache應該可以用new Map()去做 07/19 12:11
oToToT: 是說cache那邊開個東東接Promise嗎? 07/19 14:35
eight0: 我會寫成這樣 07/19 23:34
oToToT: 感謝樓上,這種方式我也有想過,但其實有一部分是我自己又 07/20 00:55
oToToT: 封裝出一些功能(運算那個也有久),不太好統一(?會考慮看看 07/20 00:56