When an asynchronous reporter block "R" is placed inside another asynchronous block the corresponding JavaScript function is entered twice and the second return value is stored and returned during any subsequent calls to the block. This only happens the first time the block is executed after the extension is loaded, but because of the stored return value it disrupts all future calls to the block.
The next time the green flag is clicked, the return value from the second ext.wait call is returned without waiting
This isn't a common scenario and I can't think of a situation where this could happen with the core Scratch blocks, but it is possible to run into with reporter blocks that wait in ScratchX.
When an asynchronous reporter block "R" is placed inside another asynchronous block the corresponding JavaScript function is entered twice and the second return value is stored and returned during any subsequent calls to the block. This only happens the first time the block is executed after the extension is loaded, but because of the stored return value it disrupts all future calls to the block.
The following example demonstrates the behavior:
example_extension.js
This isn't a common scenario and I can't think of a situation where this could happen with the core Scratch blocks, but it is possible to run into with reporter blocks that wait in ScratchX.