首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >graphql-tools:惰性抓取?

graphql-tools:惰性抓取?
EN

Stack Overflow用户
提问于 2017-08-04 02:59:38
回答 1查看 360关注 0票数 1

我正在尝试使用Apollo的graphql工具来简化graphql服务器。我想做延迟抓取,但不能像使用javascript类作为解析器时那样返回promise。

下面是我得到的信息:

模式

代码语言:javascript
复制
type Customer {
    details: Contact!
    addresses: [Address]!
}
    extend type Query {
        customers(first: Int = 0, next: Int = 50): [Customer]
        customer(id: Int!): Customer
    }

解析器

代码语言:javascript
复制
const domain1Resolvers = {
    Query: {
        customers: (_, {
            first,
            next
        }) => customers(first, next)
    }
};

解析方法:

代码语言:javascript
复制
const customers = (first, next) => {
    return new Promise(resolve => {
        var q =
            `
                SELECT *, company as organization FROM customer
                ORDER BY id DESC
                LIMIT ?, ?`;
        sql.query(q, [first, next], function(err, rows) {
            if (err) {
                throw Error(err);
            }
            resolve(rows.map(r => {
                return {
                    details: r,
                    addresses: () => getAddresses(r.id),
                }
            }));
        });
    })
};

仅当请求地址时才调用方法getAddresses。在基于类的方法中,我可以让getAddresses返回一个Promise,但如果我尝试使用这种机制,它会抱怨没有返回Iterable。必须有某种方法来仅在请求时获取地址,但是绘制空白,到目前为止还没有找到一个示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-04 05:06:13

要仅在请求时解析Customer上的字段,您可能希望使用该特定字段的解析器,而不是customers查询的解析器。你的解析器看起来像这样:

代码语言:javascript
复制
const domain1Resolvers = {
  Query: {
    customers: (_, {
      first,
      next
    }) => customers(first, next)
  },
  Customer: {
    addresses: ({ details: { id } }) => getAddresses(id)
  },
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45492474

复制
相关文章

相似问题

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