Skip to main content

I’m trying to update a base every 24 hours hitting a public API using remoteFetchAsync().


When I run the automation code below, I get this error:



ERROR


ReferenceError: remoteFetchAsync is not defined

at on line 24

at main on line 9



The automation:


//output.markdown ("# Updating BTC price");

let table = base.getTable ("Fetch"),
records = await table.selectRecordsAsync ();

//Check difficulty
await Promise.all (

records.records.map (async record => {

let stock = record.getCellValue ("Ticker");

if (! stock) {

//output.text ("Can't update the price without Ticker");

return;
}

//output.text (`Updating Mining Difficulty of ${stock}...`);

// make request to BTC.com

var response = await remoteFetchAsync (
`https://chain.api.btc.com/v3/block/latest`
).then (r => r.json ());

// Parse by hand

var data= response.data;
var diff= data.difficulty;

// print fetched data
//output.markdown (`${stock}'s Difficulty right now is: **${diff}**`)

// update record in table
return await table.updateRecordAsync (record, {
"Difficulty": diff
});


})

);

//Check Price
await Promise.all (

records.records.map(async record => {

let coin = record.getCellValue("coin");

if (!coin) {

//output.text("Can't update without the name of coin...");

return;
}

output.text(`Updating price of ${coin}`);

// make request

var requestResult = await remoteFetchAsync(
`https://api.coingecko.com/api/v3/simple/price?ids=${coin}&vs_currencies=usd`).then(r => r.json());
// print fetched data
const price = ((requestResultlcoin] || {}).usd);
output.markdown(`${coin}'s price right now is: **$${price}**`)

// update record in table
return await table.updateRecordAsync(record, {
"Price": price,
});
})
);



//output.markdown ("# Done!");


As a Script (that I have to run manually), it runs exactly as above. The only difference between the two codes is that output.markdown() is not commented.


What am I missing?

There are several obscure differences between scripting app and automation action scripts. This is one of them.


Replace remoteFetchAsync with a simple fetch. The remoteFetchAsync was introduced in scripting app to deal with cors errors, but automation scripts run on Airtable servers which does not need this workaround, thus remoteFetchAsync does not exist in automation action scripts.


Reply