quadstore
Version:
Quadstore is a LevelDB-backed RDF graph database / triplestore for JavaScript runtimes (browsers, Node.js, Deno, Bun, ...) that implements the RDF/JS interfaces and supports SPARQL queries and querying across named graphs.
49 lines • 1.41 kB
JavaScript
export const consumeOneByOne = async (source, onEachItem) => {
return new Promise((resolve, reject) => {
let item;
let ended = false;
let looping = false;
const loop = () => {
looping = true;
if ((item = source.read()) !== null) {
Promise.resolve(onEachItem(item))
.then(loop)
.catch(onError);
return;
}
looping = false;
if (ended) {
resolve();
}
};
const onError = (err) => {
reject(err);
cleanup();
};
const onEnd = () => {
ended = true;
if (!looping) {
resolve();
}
cleanup();
};
const onReadable = () => {
if (!looping) {
loop();
}
};
const cleanup = () => {
source.removeListener('end', onEnd);
source.removeListener('error', onError);
source.removeListener('readable', onReadable);
source.destroy?.();
};
source.on('end', onEnd);
source.on('error', onError);
source.on('readable', onReadable);
if ('readable' in source && source.readable) {
loop();
}
});
};
//# sourceMappingURL=consumeonebyone.js.map