微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决您应该如何使用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 举报,一经查实,本站将立刻删除。