* onerror takes `message` not `data now.

* Also use `setImmediate` if available.