uses process.nextTick when errors occur to ensure we stay async.