如何解决您应该如何使用node.js模块“ shopify-api-node”属性callGraphqlLimits来限制graphql请求?
我正在使用node.js模块“ shopify-api-node”来调用Shopifys graphql API。 我在文档中可以看到您可以通过callGraphqlLimits访问限制信息,但是您应该如何使用它来限制请求呢?
如果我我想尝试将下一个呼叫延迟5秒,但是延迟似乎是异步执行的(在测试时,我通过检查限制小于1000来强制立即节流):
DATE_FORMAT(`tanggal`,'%M')
谢谢, -路易丝
解决方法
这是我使用该库管理节流的方法。概念上流程如下;
- 进行查询
- 确定您的剩余费用
- 等待所需的秒数
- 重复
所以如果我有一个昂贵的查询,这个过程可能看起来像这样(为简洁起见省略了分页内容)
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));
}
这将始终清除您当前的成本,因此您将始终拥有“满桶”。但是,如果我们知道查询的成本,您可以做一些更复杂的事情。理想情况下,您不想等到存储桶已满,而要等待足够长的时间,以便您有足够的成本来执行查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。