diff --git a/src/subscription/mapAsyncIterator.js b/src/subscription/mapAsyncIterator.js index 0197322b4f..51d116a813 100644 --- a/src/subscription/mapAsyncIterator.js +++ b/src/subscription/mapAsyncIterator.js @@ -24,10 +24,16 @@ export function mapAsyncIterator( }; } - function mapResult(result: IteratorResult) { - return result.done - ? result - : asyncMapValue(result.value, callback).then(iteratorResult, abruptClose); + async function mapResult(result: IteratorResult) { + if (result.done) { + return result; + } + + try { + return { value: await callback(result.value), done: false }; + } catch (callbackError) { + return abruptClose(callbackError); + } } function mapReject(error: mixed) { @@ -60,14 +66,3 @@ export function mapAsyncIterator( }, }: $FlowFixMe); } - -function asyncMapValue( - value: T, - callback: (T) => PromiseOrValue, -): Promise { - return new Promise((resolve) => resolve(callback(value))); -} - -function iteratorResult(value: T): IteratorResult { - return { value, done: false }; -}