javascript - 如何使用 Node js 在airtable api 中进行异步等待工作,以在发送解析之前获取airtable 中的所有记录?

标签 javascript node.js api airtable

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

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 在发送解析 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 的 GET 方法一次返回 1 页,默认每页 100 条记录。如果您发出 GET 请求的表中的记录少于 100 条,那么它将在一次调用中返回所有记录。

如果您的 ConnectStudents 函数是异步的,它可能无法完全处理每条记录,但看起来 Airtable API 确实正在将所有记录返回到您的系统。

关于javascript - 如何使用 Node js 在airtable api 中进行异步等待工作,以在发送解析之前获取airtable 中的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70903418/

相关文章:

java - 如何使用 github java API (org.eclipse.egit.github.*) 通过邮件搜索用户

node.js - 如何在使用 yarn 安装 npm 依赖项时忽略不兼容的引擎 "node"错误?

javascript - 如何设置dijit.form.radiobutton只读模式

javascript - 如何在两个不同的事件上运行一个javascript函数?

javascript - 计算不同的输入值,将它们相加并显示结果

javascript - 为什么 Google Chrome 找不到我的 app.js 文件

node.js - Nodejs、bcrypt、 Mongoose

Bash curl 标志 hmac

api - 公共(public) Docker v2 API 端点

javascript - 如何实现 Javascript 折线碰撞检测