Сортировать результаты распознавателя graphql после завершения работы всех преобразователей полей - PullRequest
2 голосов
/ 20 сентября 2019

Я хотел бы найти, отфильтровать, упорядочить результат в памяти, который агрегируется из данных локальной базы данных и данных из внешнего API.

Это мой пример преобразователя.

const resolver = {
    Query: {
        allDevices: (_, args: QueryArgs, context: CustomContext) =>
            readAllDevices() // from local database
                .then(searchFilterOrderAndPaginate(["name"], args)) 
                // additionalDataFromOtherMicroservice is not yet resolved
                // -> no search possible over all properties
    }, 
    Mutation: {},
    Device: {
        additionalDataFromOtherMicroservice: () => Promise.resolve("" + Math.random())
        // simulates an http request to another microservice api
    }

};

Это мой пример схемы.

const schema = gql`

    type Device {
        id: ID
        number: ID
        name: String
        additionalDataFromOtherMicroservice: String
    }

    type Query {
        allDevices(
            search: String
            filterParams: [FilterParam]
            orderParams: [OrderParam]
            pagination: Pagination
        ): [Device]
`

Проблема в том, что grapqhl разрешает поля как каскад.У меня нет доступа к корневому запросу, когда преобразователь поля завершен.

Я пытался https://www.npmjs.com/package/graphql-middleware, но не срабатывает после разрешения всех подполей.

Как можно использовать мощный механизм разрешения полей в Graphql, вкл.кэширование и т. д. И доступ к результату ПОСЛЕ того, как все поля были разрешены?

...