From 038048335960c02b2da2dc878ccbc572f8754463 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Fri, 2 Apr 2021 00:51:48 +0300 Subject: [PATCH] mapAsyncIterator: simplify abruptClose --- src/subscription/mapAsyncIterator.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/subscription/mapAsyncIterator.js b/src/subscription/mapAsyncIterator.js index 51d116a813..f30a4ac513 100644 --- a/src/subscription/mapAsyncIterator.js +++ b/src/subscription/mapAsyncIterator.js @@ -14,14 +14,16 @@ export function mapAsyncIterator( // $FlowFixMe[prop-missing] const iteratorMethod = iterable[Symbol.asyncIterator]; const iterator: any = iteratorMethod.call(iterable); - let $return: any; - let abruptClose; - if (typeof iterator.return === 'function') { - $return = iterator.return; - abruptClose = (error: mixed) => { - const rethrow = () => Promise.reject(error); - return $return.call(iterator).then(rethrow, rethrow); - }; + + async function abruptClose(error: mixed) { + if (typeof iterator.return === 'function') { + try { + await iterator.return(); + } catch (_e) { + /* ignore error */ + } + } + throw error; } async function mapResult(result: IteratorResult) { @@ -51,8 +53,8 @@ export function mapAsyncIterator( return iterator.next().then(mapResult, mapReject); }, return() { - return $return - ? $return.call(iterator).then(mapResult, mapReject) + return typeof iterator.return === 'function' + ? iterator.return().then(mapResult, mapReject) : Promise.resolve({ value: undefined, done: true }); }, throw(error?: mixed): Promise> {