If VAST is a wrapper, and the VASTAdTagURI fails (e.g. due to missing CORS), onLoaded breaks, consequently the queryVAST onFetched callback is never called. onLoaded expects ads to be populated, there is no error checking in there.
(Possible solution, and workaround for me locally: If ads arrives as null in onLoaded, this.loaded is be set to true anyway and onAdAvailable is called, so errors could still be tracked, but I'm not sufficiently familiar with the recursion mechanism to actually decide this.)