首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在循环中运行graphql查询直到条件不匹配

如何在循环中运行graphql查询直到条件不匹配
EN

Stack Overflow用户
提问于 2022-04-21 09:49:53
回答 1查看 730关注 0票数 1

我试图运行graphql查询从shopify graphql api检索所有产品,但由于速率限制,我们不能一次查询所有数据。那么,如何在不面临利率限制问题的情况下有效地查询所有数据呢?任何帮助都将不胜感激。

代码语言:javascript
运行
复制
const myproducts = await axios({
        url: `https://${req.session.shop}/admin/api/2022-01/graphql.json`,
        method: 'post',
        headers: {
          "X-Shopify-Access-Token": req.session.token,
        },
        data: {
            query: `
            query ($numProducts: Int!) {
              products(first: $numProducts) {
                edges {
                  cursor
                  node {
                    id
                    title
                    
                  }
                }
                pageInfo {
                  hasNextPage
                  
                }
              }
            }
            `,
            variables: {
              numProducts: 3
              
            }
        },


    });
EN

Stack Overflow用户

发布于 2022-09-08 10:09:10

如果是用于Shopify,则应该明确地检查它们关于分页的文档:https://shopify.dev/api/usage/pagination-graphql

您可以使用"while循环“来迭代,直到满足条件,在这种情况下,当"hasNextPage”为false时。下面是一个示例,说明如何从一个集合中获取所有产品:

代码语言:javascript
运行
复制
//Query
const getProdCollection =
  `query nodes($ids: [ID!]!, $cursor: String) {
    nodes(ids: $ids) {
      ... on Collection {
        id
        
        products(first: 50, after: $cursor) {
          pageInfo {
            hasNextPage
            endCursor
          }
          edges {
           cursor
            node {
              title
              handle
              id
              descriptionHtml
              
            }
            
          }
    
      }
      
    }
  }
}`



app.post("/api/getcollection", async (req, res) => {
    const session = await Shopify.Utils.loadCurrentSession(
      req,
      res,
      app.get("use-online-tokens")
    );

if (!session) {
      res.status(401).send("Could not find a Shopify session");
      return;
    }

    const client = new Shopify.Clients.Graphql(
      session.shop,
      session.accessToken
    );

    //Set cursor to null for first iteration
    let cursor = null;
    let allData = [];

    while (true) {
      // place you looping request here
      let prodCollection = await client.query({
        data: {
          query: getProdCollection,
          variables: {
            ids: [req.body['data']],
            cursor: cursor
            
          },
        },
      });


      //update nextPage and curpor
      let nextPage = prodCollection.body.data.nodes[0].products.pageInfo.hasNextPage;
      cursor = prodCollection.body.data.nodes[0].products.pageInfo.endCursor;
      let myProductData = prodCollection.body.data.nodes[0].products.edges;
      allData = allData.concat(myProductData);


      //Finish the loop here
      if (nextPage == false) {
        break;

      }
    }

    //send back data
    res.send(allData);
  });
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71952373

复制
相关文章

相似问题

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