如何使用节点 js 在 airtable api 中进行异步等待工作,以便在发送 resolve 之前获取 airtable 中的所有记录?

How to get async await work in airtable api with node js to get all records in the airtable before sending resolve?

我正在尝试使用异步等待从 airtable 获取我的记录。我想要的是,一旦 airtable 获取了所有记录,它应该 return 一个值 1,它将被分配给一个变量计数器。一旦计数器的值为 1,它也可以用于访问其他数据。问题是,由于 airtable api 的记录限制为 1。甚至在它到达所有元素之前,它将计数器的值设置为 1。我知道这很奇怪,因为应该在 airtable [=19 中调用页面函数=] 在 done 函数之前,除非它遍历了所有记录。这是我的代码:

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);
    }
} 

我的 airtable api 访问代码是这样的

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);
            }
            }); 
      });
}

如何确保我的 airtable api 在发送 resolve promise 表明它已遍历所有记录之前已将所有记录带给我。

您似乎在使用 Airtable's NodeJS SDK。有一个用于选择所有记录的内置函数,我认为它可以大大简化您的代码并降低其他错误的风险。

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)});

The problem is that since airtable api has a record limit of 1

Airtable 的 API return 的 GET 方法一次一页,默认为每页 100 条记录。如果您向其发出 GET 请求的 table 中的记录少于 100 条,那么它会在一次调用中 return 所有记录。

如果您的 ConnectStudents 函数是异步的,它可能不会完全处理每条记录,但看起来 Airtable API 正在 return记录到您的系统。