timeout usage

Not sure if I'm missing something obvious. But why are timeouts being used instead of just storing the callback passed into `fetch`?

**this code isn't tested (I didn't even try running it)**