Help

Upcoming database upgrades. to improve our reliability at 03:30 UTC on Feb. 25 / 7:30pm PT on Feb. 24. Some users may briefly experience slow load times or error messages. Learn more here

How to get final object out of api call using airtable.js and node.js

Topic Labels: API
Solved
Jump to Solution
1254 1
cancel
Showing results for 
Search instead for 
Did you mean: 

I’m trying get all of the records form an api call into an object so I can use the data in other calculations. I can’t, however, get the function to return what I want. I’ve tried lots of combinations of async/await and .then(), but I can’t get it to work. “aTotalRecords” gets filled up with the data, but I can’t get the function to return it.

Can someone help me figure this out? Thanks in advance.

Here’s the code I have:

async function getAirtableData(){

    // var Airtable = require('airtable');
    var base = new Airtable({apiKey: oConfig.oConfig.airtableAPIKey}).base(oConfig.oConfig.airtableBaseKey);
    var aTotalRecords = []; // for keeping allthe records
    base('Polygon Transactions').select({
        
        maxRecords: 500
        // view: "Grid view"
    }).eachPage(function page(records, fetchNextPage) {
        // This function (`page`) will get called for each page of records.

        records.forEach(function(record) {
            aTotalRecords.push(record.get('tx_hash'));
            // console.log("length is: " + aTotalRecords.length);
            // console.log(record.get('tx_hash'));
        });
        // 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; }
    });

        // return Promise
    // console.log(aTotalRecords)
    // return await Promise.resolve(aTotalRecords)
    return aTotalRecords
    
};

// getAirtableData().then(console.log);

async function allAirtableRecords() {
    return getAirtableData();
};


allAirtableRecords().then(console.log);
1 Solution

Accepted Solutions

Hey @David_Weinstein - have you tried the following?

var base = new Airtable({apiKey: oConfig.oConfig.airtableAPIKey}).base(oConfig.oConfig.airtableBaseKey);
var allRecords = await base('Polygon Transactions').select({ maxRecords: 500 }).all()

It looks like this was added in v0.5.0 and the changelog has another example here

This should work for you and be much simpler too.

See Solution in Thread

1 Reply 1

Hey @David_Weinstein - have you tried the following?

var base = new Airtable({apiKey: oConfig.oConfig.airtableAPIKey}).base(oConfig.oConfig.airtableBaseKey);
var allRecords = await base('Polygon Transactions').select({ maxRecords: 500 }).all()

It looks like this was added in v0.5.0 and the changelog has another example here

This should work for you and be much simpler too.