no callback: only throw if there's no error!