response-iterator
Version:
Creates an async iterator for a variety of inputs in the browser and node. Supports fetch, node-fetch, and cross-fetch
28 lines (27 loc) • 816 B
JavaScript
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
/* c8 ignore start */ export default function promiseIterator(promise) {
let resolved = false;
const iterator = {
next () {
if (resolved) return Promise.resolve({
value: undefined,
done: true
});
resolved = true;
return new Promise((resolve, reject)=>{
promise.then((value)=>{
resolve({
value,
done: false
});
}).catch(reject);
});
}
};
if (hasIterator) {
iterator[Symbol.asyncIterator] = function() {
return this;
};
}
return iterator;
} /* c8 ignore stop */