我正在尝试使用异步等待从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/