diff --git a/src/subscription/mapAsyncIterator.js b/src/subscription/mapAsyncIterator.js
index <HASH>..<HASH> 100644
--- a/src/subscription/mapAsyncIterator.js
+++ b/src/subscription/mapAsyncIterator.js
@@ -24,10 +24,16 @@ export function mapAsyncIterator<T, U>(
     };
   }
 
-  function mapResult(result: IteratorResult<T, void>) {
-    return result.done
-      ? result
-      : asyncMapValue(result.value, callback).then(iteratorResult, abruptClose);
+  async function mapResult(result: IteratorResult<T, void>) {
+    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<T, U>(
     },
   }: $FlowFixMe);
 }
-
-function asyncMapValue<T, U>(
-  value: T,
-  callback: (T) => PromiseOrValue<U>,
-): Promise<U> {
-  return new Promise((resolve) => resolve(callback(value)));
-}
-
-function iteratorResult<T>(value: T): IteratorResult<T, void> {
-  return { value, done: false };
-}
mapAsyncIterator: simplify mapResult (#<I>)