Расшифровка Json / чтения ошибок в ReasonML - PullRequest
0 голосов
/ 29 мая 2018

Я получил запрос graphql, возвращаемый сервисом aws appsync.Это json, который возвращается из запроса.

https://github.com/idkjs/reason-apollo-question/blob/600584c454ffb2efd08b8e42e3adca0eb151ba60/scratch/persons.json#L1-L27

    {
  "data": {
    "listPeople": {
      "items": [
        {
          "age": 23,
          "id": "123",
          "name": "BobTest",
          "__typename": "Person"
        },
        {
          "age": 24,
          "id": "124",
          "name": "JoeTest",
          "__typename": "Person"
        },
        {
          "age": 25,
          "id": "125",
          "name": "JimTest",
          "__typename": "Person"
        }
      ],
      "__typename": "PersonConnection"
    }
  }
}

Это то, на что это похоже, зарегистрировано на консоли.enter image description here

Это ответ на запрос в apollo-dev-tools: enter image description here

Ошибка доступа к массиву items.

Попытка записать значения items в консоль, запустив https://github.com/idkjs/reason-apollo-question/blob/d38e7fbc33f02ab718c7227958d88f02adba1696/src/Persons.re#L66-L70

| Data(response) =>
               Js.log(response##listPeople);
               let listPeople = response##listPeople;
               let items = response##listPeople##items;
Js.log(items);

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

      We've found a bug for you!
  /Users/prisc_000/code/REASON/APOLLO/reason-apollo-question/src/Persons.re 69:32-51

  67 ┆ Js.log(response##listPeople);
  68 ┆ let listPeople = response##listPeople;
  69 ┆ let items = response##listPeople##items;
  70 ┆ Js.log(items);
  71 ┆

  This has type:
    option({. "items": option(Js.Array.t(option(
      {. "age": int, "id": string, "name":  string})))
      })

   But somewhere wanted:
    Js.t('a)

    ninja: build stopped: subcommand failed.
    >>>> Finish compiling(exit: 1)

Как устранить ошибку этого типа?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Кажется, вы определили response##listPeople как опцию, поэтому вы не можете вызвать response##listPeople##items непосредственно для него.Вы должны соответствовать шаблону более response##listPeople, прежде чем читать items из него.

0 голосов
/ 29 мая 2018

Решение:

https://github.com/idkjs/reason-apollo-question/blob/2924b1eb928cf0e4de57d5659c5da1bed4dd981c/src/Persons.re#L31-L33

По сути, я еще не присвоил некоторые / пустые переменные.

Когда вы видите, что компилятор говорит вам, что он ищет опциюкак отмечалось в приведенной выше ошибке, вы получите значение, если оно существует, обернув значение в Some.

Так вот:

let name = item##name;
let id = item##id;
let age = item##age;

Пришлось изменить на это:

let name = Some(item##name);
let id = Some(item##id);
let age = Some(item##age);

Вот и все.

...