diff --git a/src/runtime/store/index.ts b/src/runtime/store/index.ts index cafb4e9d6b..80c7a5e8e0 100644 --- a/src/runtime/store/index.ts +++ b/src/runtime/store/index.ts @@ -150,18 +150,15 @@ const single = (store: SingleStore, controller: DeriverController): StartStop /** derived store StartStopNotifier function when given an array of stores */ const multiple = (stores: ArrayStore, controller: DeriverController): StartStopNotifier => set => { const values = new Array(stores.length); + let pending = 1 << stores.length; - let inited = false; - let pending = 0; - - const sync = () => inited && !pending && controller.update(values, set); const unsubs = stores.map((store, index) => subscribe( store, value => { values[index] = value; pending &= ~(1 << index); - sync(); + if (!pending) controller.update(values, set); }, () => { pending |= 1 << index; @@ -169,7 +166,9 @@ const multiple = (stores: ArrayStore, controller: DeriverController): StartSt ) ); - (inited = true), sync(); + pending &= ~(1 << stores.length); + controller.update(values, set); + return function stop() { unsubs.forEach(v => v()), controller.cleanup(); };