как вернуть настроить данные в призме подписки - PullRequest
0 голосов
/ 19 ноября 2018

Я изучаю graphql & prisma и натолкнулся на вопрос о подписке prisma.

Я хочу возвращать список элементов при каждом создании или обновлении элемента. Так что это мой код, который не работает.

scheme.graphql

# import Item from "./generated/prisma.graphql"

type Subscription {
    todoItems: TodoItems
}

type TodoItems {
    items: [Item!]!
}

распознаватель

const Subscription = {
    todoItems: {
        subscribe: async (parent, args, context, info) => {
            const itemSubscription = await context.db.subscription.item({
                where: { mutation_in: ['CREATED', 'UPDATED'] },
            }, info);

            return itemSubscription;
        },
        resolve: async (payload, args, context, info) => {
            const items = await context.db.query.items({ type: 0, orderBy: 'updatedAt_DESC' }, info);
            return { items };
        },
    },
}

module.exports = {
    Subscription,
}

и на детской площадке graphql,

subscription{
  todoItems{
    items{
      title
    }
  }
}

выдает ошибку:

{
  "errors": [
    {
      "message": "Anonymous Subscription must select only one top level field.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "todoItems"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "Error: Anonymous Subscription must select only one top level field.",
            "    at asErrorInstance (d:\\git\\inote\\node_modules\\graphql\\execution\\execute.js:489:43)",
            "    at <anonymous>",
            "    at process._tickCallback (internal/process/next_tick.js:118:7)"
          ]
        }
      }
    }
  ]
}

Есть идеи?

1 Ответ

0 голосов
/ 19 ноября 2018

Prisma не поддерживает подписку на списки товаров. Вместо этого prisma хочет, чтобы вы подписались на мутации отдельных элементов («созданы», «обновлены», «удалены»). Как описано здесь .

* 1005 Е.Г. *

subscription newTodos {
  todo(where: {
    mutation_in: [CREATED]
  }) {
    mutation
    node {
      title
    }
  }
}

Чтобы получить «полный список», вы должны запросить список задач после подписки, чтобы избежать пропущенных событий (состояние гонки). В результате вы должны вручную «синхронизировать» данные из подписки и вашего запроса.

...