From 2e678a794f81d85e01a460b30661e0d14a3e78f7 Mon Sep 17 00:00:00 2001 From: Wil Wilsman Date: Mon, 24 Jan 2022 13:40:33 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Avoid=20recursion=20in=20generat?= =?UTF-8?q?ors=20due=20to=20no=20tail-call=20optimizations=20(#739)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/utils.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/core/src/utils.js b/packages/core/src/utils.js index 3e09859ac..3a3048e65 100644 --- a/packages/core/src/utils.js +++ b/packages/core/src/utils.js @@ -100,14 +100,16 @@ export function waitFor(predicate, options) { ? { timeout: options } : (options || {}); return generatePromise(async function* check(start, done) { - if (timeout && Date.now() - start >= timeout) { - throw new Error(`Timeout of ${timeout}ms exceeded.`); - } else if (!predicate()) { - yield new Promise(r => setTimeout(r, poll)); - return yield* check(start); - } else if (idle && !done) { - yield new Promise(r => setTimeout(r, idle)); - return yield* check(start, true); + while (true) { + if (timeout && Date.now() - start >= timeout) { + throw new Error(`Timeout of ${timeout}ms exceeded.`); + } else if (!predicate()) { + yield new Promise(r => setTimeout(r, poll, (done = false))); + } else if (idle && !done) { + yield new Promise(r => setTimeout(r, idle, (done = true))); + } else { + return; + } } }(Date.now())); }