我使用node.js模块"shopify- API -node“来调用Shopifys graphql API。我可以在文档中看到您可以通过callGraphqlLimits访问节流信息,但您应该如何使用它来节流请求?
例如,如果我想延迟下一次调用5s,我尝试了一下,但延迟似乎是异步执行的(在测试时,我通过检查limit小于1000来强制立即限制):
shopify.on('callGraphqlLimits', async (limits) => {
console.log(limits)
if (limits.remaining < 1000){
console.log('Delaying 5s')
await delay(5000)
}
})谢谢,-Louise
发布于 2021-05-28 23:54:21
下面是我如何使用该库来管理节流。从概念上讲,流程如下;
因此,如果我有一个开销很大的查询,过程可能如下所示(为简洁起见,省略了分页内容)
async function expensiveQuery() {
let currentCost = 0;
let hasNextPage;
shopify.on('callGraphqlLimits', (limits) => {
currentCost = limits.current;
});
do {
const waitTime = Math.ceil(currentCost / 50); // 50 is the default restore rate
await timeout(waitTime * 1000);
const data = await shopify.graphql(GET_PRODUCTS);
const { products: { edges, pageInfo } } = data;
// do something with data;
hasNextPage = pageInfo.hasNextPage;
} while (hasNextPage)
}
function timeout(ms) { // helper function
return new Promise(resolve => setTimeout(resolve, ms));
}这将始终清空您当前的成本,因此您将始终拥有一个“满桶”。但是,如果我们知道查询的成本,您可以做一些更复杂的事情。理想情况下,您不想等到存储桶满了,而是等待足够长的时间,这样您就有足够的可用成本来执行查询。
https://stackoverflow.com/questions/64313422
复制相似问题