pass result AND error to once, and really try to only call it once