 <p>You are not creating a queue of object you are just shadowing the same objects and pushing it again into the speaks array, so you will get the last version of your object several times inside the array.</p> <p>If you want to create an async behavior you should try callbacks instead of a simple <code>for</code> loop.</p> <p>It would be better do something like this:</p> <pre><code>var speak = [ { utter: "What do they call a quarter pounder with cheese in Paris?", speaker: true }, { utter: "They don't call it a quarter pounder with cheese?", speaker: false, time: 3 }, { utter: "They got the metric system. They call it a Royale with cheese", speaker: true } ]; </code></pre> <p>Then you can use array methods like <code>filter</code> and <code>map</code> to handle the data you need.</p> <p>Finally, you can use events to trigger each speaking when something in you application happens.</p>