Wouldn't it be better to cache the first error here, instead of keeping track of whether or not the callback has been called? We could even keep track of the errors in an array, so we can provide a complete error set in the callback.