diff --git a/src/Utils.js b/src/Utils.js index e7ef042020b706b747f23edf359b4ba3ef6c65de..5c37102f22deb44933ffecc4d3141309359e97db 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -323,11 +323,27 @@ module.exports = function (Y /* : any*/) { ins.push(o) } }) + this.waiting = [] // put in executable order ins = notSoSmartSort(ins) - ins.forEach(this.onevent) - dels.forEach(this.onevent) - this.waiting = [] + // this.onevent can trigger the creation of another operation + // -> check if this.awaiting increased & stop computation if it does + for (var i = 0; i < ins.length; i++) { + if (this.awaiting === 0) { + this.onevent(ins[i]) + } else { + this.waiting = this.waiting.concat(ins.slice(i)) + break + } + } + for (var i = 0; i < dels.length; i++) { + if (this.awaiting === 0) { + this.onevent(dels[i]) + } else { + this.waiting = this.waiting.concat(dels.slice(i)) + break + } + } } } }