Don't throw, pass error into callback