Skip to main content

Below is the example code from https://airtable.com/api for listing records with Javascript. How should I adjust the code when my base have more than 100 records, and I want to run some code when all the records have been retrieved?


(I know that I’ll have to remove “maxRecords: 3,”)


If I put my code within “eachPage” but then the code will be executed multiple times (obviously).


I’ve tried to put my code in inside an else statement within the done-function but then I don’t have access to the variables and methods like records, record, record.get and so on.


var Airtable = require('airtable');
var base = new Airtable({apiKey: 'YOUR_API_KEY'}).base('appInTsFatECjqsT2');

base('Uppställningsplatser').select({
// Selecting the first 3 records in Alla uppställningsplatser:
maxRecords: 3,
view: "Alla uppställningsplatser"
}).eachPage(function page(records, fetchNextPage) {
// This function (`page`) will get called for each page of records.

records.forEach(function(record) {
console.log('Retrieved', record.get('Uppställningsplats'));
});

// To fetch the next page of records, call `fetchNextPage`.
// If there are more records, `page` will get called again.
// If there are no more records, `done` will get called.
fetchNextPage();

}, function done(err) {
if (err) { console.error(err); return; }
});

Saw this when I was looking for the same solution.


It was frustrating, but I found the simplest answer…


Airtable secretly added an .all() method which has been greatly under-reported.


For example, I have a base with a table called ‘Contacts’ and this will let me pull all and handle each:


 const records = await base('Contacts').select().all()

console.log(records.length) // logs the quantity of records you've pulled

for (const record of records) {
console.log(record.id) // logs the record id
const name = record.get('name') // lets you grab and handle value
console.log(name)
// do other things, it's your life, whatever...
}


This was released officially on on Apr 29, 2017:




The “official” method is:


table.select({view: 'Main View').all().then(records => {
// records array will contain every record in Main View.
}).catch(err => {
// Handle error.
})

Hope this helps the next person. I spent hours looking for this obscure answer.


“WHY IS THIS NOT DOCUMENTED ON THE API PAGE” he shouted angrily, to an empty room.


Reply