Zapier 中的分页
Pagination in Zapier
我正在尝试使用以下代码从 Zapier 中的分页 API 中获取所有记录。
const limitPerPage = 20;
const apiUrl = "https://myurl.com/data";
var lastCursor = null;
var output = null;
const getContent = async function (cursor) {
let actualUrl = apiUrl + `?cursor=${cursor}&limit=${limitPerPage}`;
var apiResults = await fetch(actualUrl)
.then(resp => {
return resp.json;
});
}
const getEntireContentList = async function (cursor) {
const results = await getContent(cursor);
console.log("Retreiving data from API for cursor : " + cursor);
if (results.metadata.cursor !== "") {
return results.concat(await getEntireContentList(results.metadata.cursor));
} else {
return results;
}
};
(async() => {
const entireList = await getEntireContentList();
console.log(entireList);
output = entireList;
callback(null, entireList);
})();
我收到错误信息
你没有定义output
!尝试 output = {id: 1, hello: await Promise.resolve("world")};
我该如何解决这个问题?
您的问题是,尽管您正在 await
执行该函数,但在您的代码有机会 运行 之前,顶层继续执行并结束执行。
好消息是,Zapier 已经将您的代码包装在异步函数中,因此您可以在顶层使用 await
(根据 these docs)。
试试这个:
const limitPerPage = 20;
const apiUrl = "https://myurl.com/data";
let lastCursor = null;
// var output = null; // zapier does this for you already
const getContent = async function (cursor) {
const actualUrl = apiUrl + `?cursor=${cursor}&limit=${limitPerPage}`;
const rawResponse = await fetch(actualUrl)
return resp.json() // async function, you had it as a property
}
const getEntireContentList = async function (cursor) {
const results = await getContent(cursor);
console.log("Retreiving data from API for cursor : " + cursor);
if (results.metadata.cursor !== "") {
return results.concat(await getEntireUserList(results.metadata.cursor)); // should this be named getEntireContentList?
} else {
return results;
}
};
return {
results: await getEntireContentList()
}
我注意到这是一种递归方法。这很好,但请记住,您的执行时间有限。您也可能会达到内存限制(取决于您返回的对象数量),因此请注意这一点。
我正在尝试使用以下代码从 Zapier 中的分页 API 中获取所有记录。
const limitPerPage = 20;
const apiUrl = "https://myurl.com/data";
var lastCursor = null;
var output = null;
const getContent = async function (cursor) {
let actualUrl = apiUrl + `?cursor=${cursor}&limit=${limitPerPage}`;
var apiResults = await fetch(actualUrl)
.then(resp => {
return resp.json;
});
}
const getEntireContentList = async function (cursor) {
const results = await getContent(cursor);
console.log("Retreiving data from API for cursor : " + cursor);
if (results.metadata.cursor !== "") {
return results.concat(await getEntireContentList(results.metadata.cursor));
} else {
return results;
}
};
(async() => {
const entireList = await getEntireContentList();
console.log(entireList);
output = entireList;
callback(null, entireList);
})();
我收到错误信息
你没有定义output
!尝试 output = {id: 1, hello: await Promise.resolve("world")};
我该如何解决这个问题?
您的问题是,尽管您正在 await
执行该函数,但在您的代码有机会 运行 之前,顶层继续执行并结束执行。
好消息是,Zapier 已经将您的代码包装在异步函数中,因此您可以在顶层使用 await
(根据 these docs)。
试试这个:
const limitPerPage = 20;
const apiUrl = "https://myurl.com/data";
let lastCursor = null;
// var output = null; // zapier does this for you already
const getContent = async function (cursor) {
const actualUrl = apiUrl + `?cursor=${cursor}&limit=${limitPerPage}`;
const rawResponse = await fetch(actualUrl)
return resp.json() // async function, you had it as a property
}
const getEntireContentList = async function (cursor) {
const results = await getContent(cursor);
console.log("Retreiving data from API for cursor : " + cursor);
if (results.metadata.cursor !== "") {
return results.concat(await getEntireUserList(results.metadata.cursor)); // should this be named getEntireContentList?
} else {
return results;
}
};
return {
results: await getEntireContentList()
}
我注意到这是一种递归方法。这很好,但请记住,您的执行时间有限。您也可能会达到内存限制(取决于您返回的对象数量),因此请注意这一点。