basically if there's an error on the first tick, `ret.value(done)` is called as well as the `done` in the `catch` block. this create a double callback.