function singleAnimation( verticesArray, animateBuffArrays, stepTotal) { let len = verticesArray.length let pollIndex = 0; return function () { for (let i = 0, index = 0; i < len; i += 3, index++) { let Indexes = index * stepTotal + pollIndex verticesArray[i + 2] = animateBuffArrays[Indexes] } pollIndex++ if (pollIndex < stepTotal) { // mesh.geometry.attributes.position.needsUpdate = true; return false } else { return true } } } self.addEventListener('message', event => { let data = event.data let id = data.id let fns = singleAnimation( data.verticesArray, data.animateBuffArrays, data.stepTotal ) let interval = setInterval(() => { if (fns()) { clearInterval(interval) self.postMessage(id) } }, 16) })