# 17 Coordinating timelines ## There’s a bug! (after optimization) ![](https://i.imgur.com/QosSI0I.jpg) ## Identify actions: Step 1 ![](https://i.imgur.com/q6uz1Zl.jpg) ## Draw each action: Step 2 ![](https://i.imgur.com/wej7N4G.jpg) ## Simplify the diagram: Step 3 ### JavaScript threading model simplification steps 1. All actions on a single timeline go into a single box. 2. Consolidate timelines that end by creating one new timeline. ![](https://i.imgur.com/OY7L4og.jpg) ![](https://i.imgur.com/GB4lqvW.jpg) ## Possible ordering analysis ![](https://i.imgur.com/RtLs3pk.jpg) ## Why this timeline is faster ![](https://i.imgur.com/6Z6tGf6.jpg) ## Waiting for both parallel callbacks ![](https://i.imgur.com/4jijBae.jpg) ## A concurrency primitive for cutting timelines ![](https://i.imgur.com/6YC8ijC.jpg) ![](https://i.imgur.com/A845C7Y.jpg) ## Using Cut() in our code ![](https://i.imgur.com/GAeROH4.jpg) ![](https://i.imgur.com/h65vege.jpg) ### Promise.all ![](https://i.imgur.com/mtTgn7R.jpg) https://stackoverflow.com/a/52669775/5247640 ## Uncertain ordering analysis ![](https://i.imgur.com/scshsDL.jpg) ## Parallel execution analysis ![](https://i.imgur.com/s8RuFjM.jpg) ## Multiple-click analysis ![](https://i.imgur.com/QJucmwe.jpg) ## A primitive to call something just once ![](https://i.imgur.com/uNUV6tP.jpg) ## Implicit versus explicit model of time ![](https://i.imgur.com/1lElckK.jpg) ## Summary: Manipulating timelines ![](https://i.imgur.com/MLcnYwO.jpg)