function getAirtableByPages(
table,
{ incremental = true, selectOptions = {}, columns } = {}
) {
return Generators.observe((next) => {
const data = [];
base(table)
.select(selectOptions)
.eachPage(
async function page(records, fetchNextPage) {
for (const r of records) data.push(r.fields);
if (columns === undefined) {
data.columns = columns = Array.from(
new Set(data.flatMap((d) => Object.keys(d)))
);
}
if (incremental) next(data);
await Promises.delay(200);
fetchNextPage();
},
function done(err) {
if (err) {
console.error(err);
return;
}
next(data);
}
);
next(data);
});
}