`.executeAsync(script)` is what you want to be using next not what you have, the script will be evaled on the other side and the final argument to the function will be a callback, it will then ONLY return when the callback returns, aka no need for doing the interval like this.

```
var script =
     'var cb = arguments[arguments.length - 1];' +
     'runner.on("end", function() { cb(results); });' +
     'runner.on("fail", function() { cb(results); });';
```