I was told that this is really a bug, but it cannot be fixed on the Zorro side. It must be accounted for in the script. The IB API can sometimes not deliver two option chains directly in sequence. It needs a couple seconds between the SPY and the AAPL options chain. That's why you did not get the chain for the second asset.

Solution: use Sleep() or wait() in your loop for waiting 10-30 seconds before the second contractUpdate call. This behavior is apparently dependent on the market situation, in the past we observed no problem to get several options chains in sequence.

This will be mentioned in the manual.