@fbltd/async
Version:
Miscellaneous async utils
23 lines (22 loc) • 677 B
JavaScript
import { PromiseConfiguration } from "../../promise-configuration.js";
/**
* @internal
*/
export const StreamFinishError = new Error("Stream is done");
export function next(dep) {
const disposePromise = new PromiseConfiguration();
const resultPromise = new PromiseConfiguration();
Promise.race([dep.next(), disposePromise.promise])
.then((res) => {
if (dep.done || disposePromise.isFulfilled) {
resultPromise.reject(StreamFinishError);
}
else {
resultPromise.resolve(dep.value);
}
});
return {
promise: resultPromise.promise,
dispose: () => disposePromise.resolve()
};
}