From 48d484bca2a24ae6f03f2c632906d39f23e38db1 Mon Sep 17 00:00:00 2001 From: wryk Date: Thu, 13 Feb 2020 16:30:25 +0100 Subject: [PATCH] fix observable to async iterator --- src/services/misc.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/services/misc.js b/src/services/misc.js index d78047e..8794889 100644 --- a/src/services/misc.js +++ b/src/services/misc.js @@ -31,34 +31,31 @@ export const defer = () => { export async function* observableToAsyncIterator(observable) { const buffer = [defer()] - let done = false - const next = (x) => { - buffer[buffer.length - 1].resolve(x) + const next = value => { + buffer[buffer.length - 1].resolve(value) buffer.push(defer()) } + const complete = value => { + buffer[buffer.length - 1].resolve(value) + } + const error = (error) => { buffer[buffer.length - 1].reject(error) } - const complete = (x) => { - buffer[buffer.length - 1].resolve(x) - done = true - } - const subscription = observable.subscribe({ next, error, complete }) try { while (true) { const value = await buffer[0].promise - buffer.unshift() + buffer.shift() - // might cause a early complete because done can be true when more than one item are in buffer - if (done) { - return value - } else { + if (buffer.length) { yield value + } else { + return value } } } finally {