首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您应该如何使用node.js模块"shopify-api-node“属性callGraphqlLimits来限制graphql请求?

您应该如何使用node.js模块"shopify-api-node“属性callGraphqlLimits来限制graphql请求?
EN

Stack Overflow用户
提问于 2020-10-12 15:32:25
回答 1查看 159关注 0票数 0

我使用node.js模块"shopify- API -node“来调用Shopifys graphql API。我可以在文档中看到您可以通过callGraphqlLimits访问节流信息,但您应该如何使用它来节流请求?

例如,如果我想延迟下一次调用5s,我尝试了一下,但延迟似乎是异步执行的(在测试时,我通过检查limit小于1000来强制立即限制):

代码语言:javascript
复制
shopify.on('callGraphqlLimits', async (limits) => {
    console.log(limits)
    if (limits.remaining < 1000){
      console.log('Delaying 5s')
      await delay(5000)
    }
  })

谢谢,-Louise

EN

回答 1

Stack Overflow用户

发布于 2021-05-28 23:54:21

下面是我如何使用该库来管理节流。从概念上讲,流程如下;

  • Do a
    • remaining cost
    • Wait number of query
    • Determine

因此,如果我有一个开销很大的查询,过程可能如下所示(为简洁起见,省略了分页内容)

代码语言:javascript
复制
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));
}

这将始终清空您当前的成本,因此您将始终拥有一个“满桶”。但是,如果我们知道查询的成本,您可以做一些更复杂的事情。理想情况下,您不想等到存储桶满了,而是等待足够长的时间,这样您就有足够的可用成本来执行查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64313422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档