## Keep Trying Or Giveup

### Instructions

Create a `retry` function, that takes 2 arguments

- a `count` indicates maximum amount of retries
- an async `callback`, that will be called on every try

`retry` returns a function that calls and returns value from `callback`
function passing its arguments and catches errors. If error is caught it
should return the `callback` function with catch. If number of errors
exceeds `count` then throw an `Error`.

> for count of 3, the function will be called at most 4 times:
> the initial call + 3 retries.

Create a `timeout` function, that takes 2 arguments

- a `delay` indicates maximum wait time
- an async `callback`, that will be called

`timeout` returns a function either that calls and returns value from `callback`
function passing its arguments or returns `Error('timeout')` if `callback` didn't
resolve before `delay` time has reached.

### Notions

- [nan-academy.github.io/js-training/examples/promise.js](https://nan-academy.github.io/js-training/examples/promises.js)
- [devdocs.io/dom/settimeout]( https://devdocs.io/dom/settimeout)
- [devdocs.io/javascript/global_objects/promise/race](https://devdocs.io/javascript/global_objects/promise/race)
