* Returns a promise that will fail after the specified delay. Optionally, * this method can take opt_racePromise parameter. In this case, the * resulting promise will either fail when the specified delay expires or * will resolve based on the opt_racePromise, whichever happens first. * @
(delay, opt_racePromise, opt_message)
| 124 | * @template RESULT |
| 125 | */ |
| 126 | timeoutPromise(delay, opt_racePromise, opt_message) { |
| 127 | let timerKey; |
| 128 | const delayPromise = new this.win.Promise((_resolve, reject) => { |
| 129 | timerKey = this.delay(() => { |
| 130 | reject(user().createError(opt_message || 'timeout')); |
| 131 | }, delay); |
| 132 | |
| 133 | if (timerKey == -1) { |
| 134 | throw new Error('Failed to schedule timer.'); |
| 135 | } |
| 136 | }); |
| 137 | if (!opt_racePromise) { |
| 138 | return delayPromise; |
| 139 | } |
| 140 | const cancel = () => { |
| 141 | this.cancel(timerKey); |
| 142 | }; |
| 143 | opt_racePromise.then(cancel, cancel); |
| 144 | return this.win.Promise.race([delayPromise, opt_racePromise]); |
| 145 | } |
| 146 | |
| 147 | /** |
| 148 | * Returns a promise that resolves after `predicate` returns true. |
no test coverage detected