瀏覽代碼

Implementing observable

Kirk Trombley 5 年之前
父節點
當前提交
bf491f4f70
共有 1 個文件被更改,包括 17 次插入2 次删除
  1. 17 2
      client/src/store.js

+ 17 - 2
client/src/store.js

@@ -1,7 +1,22 @@
 const createObservable = initial => {
+  let _val = initial;
+  let _listeners = [];
+
   return {
-    _get: () => initial, // TODO
-    _set: () => {}, // TODO
+    _get: () => _val,
+    _set: newValue => {
+      const oldValue = _val;
+      _val = newValue;
+      _listeners
+        .filter(({ equality }) => !equality(oldValue, newValue))
+        .forEach(({ callback }) => callback(newValue));
+    },
+    _sub: (callback, equality) => {
+      _listeners.push({ callback, equality });
+      return () => {
+        _listeners = _listeners.filter(ln => ln.callback !== callback);
+      }
+    }
   }
 }