Browse Source

handle obersevers being removed during notify

Trevor Baron 7 years ago
parent
commit
3844840c11
2 changed files with 5 additions and 2 deletions
  1. 1 0
      dist/preview release/what's new.md
  2. 4 2
      src/Tools/babylon.observable.ts

+ 1 - 0
dist/preview release/what's new.md

@@ -97,6 +97,7 @@
 - Mesh.MergeMeshes flips triangles on meshes with negative scaling ([SvenFrankson](http://svenfrankson.com))
 - Avoid firing button events multiple times when calling vrController.attachMesh() ([TrevorDev]
 - Parse geometry when load binary mesh ([SinhNQ](https://github.com/quocsinh))
+- Removing observers during observable notify should not skip over valid observers ([TrevorDev]
 
 ### Core Engine
 

+ 4 - 2
src/Tools/babylon.observable.ts

@@ -217,7 +217,7 @@
             var index = this._observers.indexOf(observer);
 
             if (index !== -1) {
-
+                observer._willBeUnregistered = true;
                 this._observers.splice(index, 1);
                 return true;
             }
@@ -273,7 +273,9 @@
             state.skipNextObservers = false;
             state.lastReturnValue = eventData;
 
-            for (var obs of this._observers) {
+            // Iterate over copy of array to handle removed observables during callback
+            var observerList = this._observers.slice();
+            for (var obs of observerList) {
                 if (obs._willBeUnregistered) {
                     continue;
                 }