Skip to content

Commit

Permalink
mapAsyncIterator: move promise resolution into mapResult (#3028)
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanGoncharov committed Apr 4, 2021
1 parent 541a058 commit 7f40198
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/subscription/mapAsyncIterator.js
Expand Up @@ -23,12 +23,14 @@ export function mapAsyncIterator<T, U>(
throw error;
}

async function mapResult(result: IteratorResult<T, void>) {
if (result.done) {
return result;
}

async function mapResult(resultPromise: Promise<IteratorResult<T, void>>) {
try {
const result = await resultPromise;

if (result.done) {
return result;
}

return { value: await callback(result.value), done: false };
} catch (callbackError) {
return abruptClose(callbackError);
Expand All @@ -39,16 +41,16 @@ export function mapAsyncIterator<T, U>(
https://github.com/facebook/flow/issues/3258 */
return ({
next(): Promise<IteratorResult<U, void>> {
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<IteratorResult<U, void>> {
if (typeof iterator.throw === 'function') {
return iterator.throw(error).then(mapResult, abruptClose);
return mapResult(iterator.throw(error));
}
return Promise.reject(error).catch(abruptClose);
},
Expand Down

0 comments on commit 7f40198

Please sign in to comment.