From e7697fb7e558e936e03e884cd976468a963a386c Mon Sep 17 00:00:00 2001 From: danielkaxis <77433590+danielkaxis@users.noreply.github.com> Date: Mon, 14 Nov 2022 15:18:14 +0100 Subject: [PATCH] fix(execute): end iterator on teardown (#2803) Co-authored-by: Gustav Tiger Co-authored-by: Gustav Tiger --- .changeset/healthy-hornets-warn.md | 5 +++++ exchanges/execute/src/execute.ts | 10 +++------- 2 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 .changeset/healthy-hornets-warn.md diff --git a/.changeset/healthy-hornets-warn.md b/.changeset/healthy-hornets-warn.md new file mode 100644 index 00000000..066d4fcb --- /dev/null +++ b/.changeset/healthy-hornets-warn.md @@ -0,0 +1,5 @@ +--- +'@urql/exchange-execute': patch +--- + +End iterator when teardown functions runs, previously it waited for one extra call to next, then ended the iterator diff --git a/exchanges/execute/src/execute.ts b/exchanges/execute/src/execute.ts index 2501a264..cb5c5bed 100644 --- a/exchanges/execute/src/execute.ts +++ b/exchanges/execute/src/execute.ts @@ -49,6 +49,7 @@ const makeExecuteSource = ( args: ExecuteParams ): Source => { return make(observer => { + let iterator: AsyncIterator; let ended = false; Promise.resolve() @@ -66,10 +67,7 @@ const makeExecuteSource = ( observer.next(makeResult(operation, result as ExecutionResult)); return; } - - const iterator: AsyncIterator = result[ - asyncIterator! - ](); + iterator = result[asyncIterator!](); let prevResult: OperationResult | null = null; function next({ @@ -90,9 +88,6 @@ const makeExecuteSource = ( if (!done && !ended) { return iterator.next().then(next); } - if (ended) { - iterator.return && iterator.return(); - } } return iterator.next().then(next); @@ -106,6 +101,7 @@ const makeExecuteSource = ( }); return () => { + if (iterator && iterator.return) iterator.return(); ended = true; }; }); -- knotmirror 0.0.1