diff options
| author | Haishan <[email protected]> | 2019-01-13 22:23:05 +0800 |
|---|---|---|
| committer | Haishan <[email protected]> | 2019-01-13 22:25:15 +0800 |
| commit | 61dd81d488662ce43af0193796673ebf01dd0d90 (patch) | |
| tree | 185d0813c804bed189968481c4ba9600ee7b371a /src/api | |
| parent | dfc85a317a0a35dadb05190543387fe4e1896704 (diff) | |
refactor(logs): move logs state into redux store
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/logs.js | 54 |
1 files changed, 18 insertions, 36 deletions
diff --git a/src/api/logs.js b/src/api/logs.js index 6de5b65..c8c3593 100644 --- a/src/api/logs.js +++ b/src/api/logs.js @@ -6,37 +6,20 @@ const getRandomStr = () => { return Math.floor((1 + Math.random()) * 0x10000).toString(16); }; -const Size = 300; - let even = false; -const store = { - logs: [], - size: Size, - fetched: false, - subscribers: [], - appendData(o) { - const now = new Date(); - const time = now.toLocaleString('zh-Hans'); - // mutate input param in place intentionally - o.time = time; - o.id = now - 0 + getRandomStr(); - o.even = even = !even; - this.logs.unshift(o); - if (this.logs.length > this.size) this.logs.pop(); - this.subscribers.forEach(f => f(o)); - }, +let fetched = false; - subscribe(listener) { - const me = this; - this.subscribers.push(listener); - return function unsubscribe() { - const idx = me.subscribers.indexOf(listener); - me.subscribers.splice(idx, 1); - }; - } -}; +function appendData(o, callback) { + const now = new Date(); + const time = now.toLocaleString('zh-Hans'); + // mutate input param in place intentionally + o.time = time; + o.id = now - 0 + getRandomStr(); + o.even = even = !even; + callback(o); +} -function pump(reader) { +function pump(reader, appendLog) { return reader.read().then(({ done, value }) => { if (done) { // eslint-disable-next-line no-console @@ -47,31 +30,30 @@ function pump(reader) { const arrRawJSON = t.trim().split('\n'); arrRawJSON.forEach(s => { try { - store.appendData(JSON.parse(s)); + appendData(JSON.parse(s), appendLog); } catch (err) { // eslint-disable-next-line no-console console.log('JSON.parse error', JSON.parse(s)); } }); - return pump(reader); + return pump(reader, appendLog); }); } -function fetchLogs(apiConfig) { - if (store.fetched) return store; - store.fetched = true; +function fetchLogs(apiConfig, appendLog) { + if (fetched) return; + fetched = true; const { url, init } = getURLAndInit(apiConfig); fetch(url + endpoint, init) .then(response => { const reader = response.body.getReader(); - pump(reader); + pump(reader, appendLog); }) .catch(err => { - store.fetched = false; + fetched = false; // eslint-disable-next-line no-console console.log('GET /logs error', err); }); - return store; } export { fetchLogs }; |
