(data, predicate, timeout)
| 6 | * @return {Promise} |
| 7 | */ |
| 8 | export default function waitForReady(data, predicate, timeout) { |
| 9 | return new Promise((resolve, reject) => { |
| 10 | if (predicate()) { |
| 11 | return resolve(data) |
| 12 | } |
| 13 | // Timeout. Add to queue |
| 14 | if (timeout < 1) { |
| 15 | return reject({ ...data, queue: true }) // eslint-disable-line |
| 16 | } |
| 17 | // Else recursive retry |
| 18 | return pause(10).then(_ => { |
| 19 | return waitForReady(data, predicate, timeout - 10).then(resolve, reject) |
| 20 | }) |
| 21 | }) |
| 22 | } |
| 23 | |
| 24 | function pause(ms) { |
| 25 | return new Promise(resolve => setTimeout(resolve, ms)) |
no test coverage detected