如何在Apollo GraphQL解析器的一个函数中解析2种不同的方法?

时间:2018-11-22 21:12:32

标签: javascript ecmascript-6 graphql apollo

我有这个解析器

describe('do not put async before the function keyword!', function () {
    uids = process.env.ENV_OBJECTS.split(',');

    let outcome;

    for(let uid in uids) {
        it('Can safely put async before the function here', async function() {
            outcome = await getOutcome(uid);
            // etc.
        });
    }
});

但是我还需要在其中包含另一个方法/模型:

SLAccount: (_, { imsUserId, imsToken }, context) =>
  new Promise((resolve, reject) => {
    addAuth(context, imsUserId, imsToken);
    context.model
      .getUserAccount(getEndpoint(imsUserId, imsToken))
      .then(resolve)
      .catch(reject);
  }),

所以我需要这样的东西:

  getHardware(endpoint) {
    return this.connector
      .get(
        `${endpoint}/...`,
      )
      .catch(res => this.handleError(res));
  }

问题是我不需要同时调用它们,有时我只需要SLAccount: (_, { imsUserId, imsToken }, context) => new Promise((resolve, reject) => { addAuth(context, imsUserId, imsToken); context.model .getUserAccount(getEndpoint(imsUserId, imsToken)) .then(resolve) .catch(reject); context.model .getHardware(getEndpoint(imsUserId, imsToken)) .then(resolve) .catch(reject); }), 内的那些方法/模型之一即可。

那么解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

GraphQL由需求(查询)驱动。

当您需要account时,只需进行查询即可。当您需要account和相关的hardware时,只需查询两者-其他的解析器将被自动调用。这是graphQL背后的基本思想。查找有关graphQL中的关系的任何教程。