Estoy tratando de obtener mi registro de airtable usando async await. Lo que quiero es que una vez que airtable haya obtenido todos los registros, devuelva un valor 1 que se asignará a un contador variable. Una vez que el valor del contador es 1, también se puede usar para acceder a otros datos. El problema es que, dado que airtable api tiene un límite de registro de 1. Incluso antes de que alcance todos los elementos, establece el valor de contador en 1. Sé que esto es extraño porque la función de página debe llamarse en airtable api antes de que finalice la función a menos que tenga atravesado por todos los registros. Aquí está mi código:
var counter = 0; async function FirstCall(){ counter = await backlinksubmissionChecker.getData(); console.log("Counter value is ",counter); if(counter==1){ counter = await codequalityXP.getData(); console.log("Counter value is ",counter); } }mi código para el acceso a la API de airtable es así
async function getData() { return new Promise((resolve, reject) => { console.log("Inside Backlink submission checker"); var i=0; let value = base("Program XP").select({ }).eachPage(function page(records, fetchNextPage) { records.forEach(function(record) { let recordID = record.get("RecordID"); let email = record.get("Email Address"); ConnectStudents(recordID,email); i++; }); fetchNextPage(); }, function done(err) { if (err) { console.error(err); reject("Promise rejected"); }else{ resolve(1); } }); }); }¿Cómo me aseguro de que mi api de airtable me haya traído todos los registros antes de enviar una promesa de resolución que indique que ha atravesado todos los registros?
Parece que está utilizando el SDK de NodeJS de Airtable . Hay una función incorporada para seleccionar todos los registros que creo que simplifica enormemente su código y disminuye el riesgo de otros errores.
async function getData() { console.log("Inside Backlink submission checker"); const records = await base('Program XP').select().all(); var i = 0; records.forEach(function(record) { let recordID = record.get("RecordID"); let email = record.get("Email Address"); ConnectStudents(recordID,email); i++; }); return 1; } getData() .then((res)=>console.log("DONE: ", res)) .catch((err)=>{console.log("ERR: ", err)});El problema es que, dado que airtable api tiene un límite de registro de 1
El método GET para la API de Airtable devuelve una página a la vez con un valor predeterminado de 100 registros por página. Si tiene menos de 100 registros en la tabla a la que está realizando la solicitud GET, devolverá todos los registros en una sola llamada.
Si su función ConnectStudents es asíncrona, es posible que no esté procesando completamente cada registro, pero parece que la API de Airtable está devolviendo todos los registros a su sistema.