diff --git a/src/subscription/mapAsyncIterator.js b/src/subscription/mapAsyncIterator.js index b76a4cb35f..75e3495148 100644 --- a/src/subscription/mapAsyncIterator.js +++ b/src/subscription/mapAsyncIterator.js @@ -23,12 +23,14 @@ export function mapAsyncIterator( throw error; } - async function mapResult(result: IteratorResult) { - if (result.done) { - return result; - } - + async function mapResult(resultPromise: Promise>) { try { + const result = await resultPromise; + + if (result.done) { + return result; + } + return { value: await callback(result.value), done: false }; } catch (callbackError) { return abruptClose(callbackError); @@ -39,16 +41,16 @@ export function mapAsyncIterator( https://github.com/facebook/flow/issues/3258 */ return ({ next(): Promise> { - return iterator.next().then(mapResult, abruptClose); + return mapResult(iterator.next()); }, return() { return typeof iterator.return === 'function' - ? iterator.return().then(mapResult, abruptClose) + ? mapResult(iterator.return()) : Promise.resolve({ value: undefined, done: true }); }, throw(error?: mixed): Promise> { if (typeof iterator.throw === 'function') { - return iterator.throw(error).then(mapResult, abruptClose); + return mapResult(iterator.throw(error)); } return Promise.reject(error).catch(abruptClose); },