Разрешение типа запроса с обещанием в Bucklescript

У меня есть этот запрос, который я пытаюсь проверить по причине библиотеки graphql_ppx. суть кода

Это снимок экрана с аннотациями типа редактора:  введите описание изображения здесь

Используя библиотеку @ mhallin / graphql_ppx, я настроил следующий запрос:

    module FilmQuery = [%graphql
  {|
    {
      allFilms {
        films {
          id
          title
          releaseDate
        }
      }
    }
|}
];

exception Graphql_error(string);

/* Construct a "packaged" query; FilmQuery takes no arguments: */
let filmQuery = FilmQuery.make();

/* Send this query string to the server */
let query = filmQuery##query // type string

Я получаю следующую ошибку, когда отправляю запрос на сервер, он возвращает следующую ошибку.

{ errors: [ { message: 'Must provide query string.' } ] }

Но если вы выполните Js.log (запрос), вы увидите, что он создается , который работает на https://swapi.apis.guru

query films($first: Int)  {
  allFilms(first: $first)  {
   films  {
     id  
     title  
     releaseDate  
   }
  }
}

Если вы используете Js.log (filmQuery), вы получите:

{ query: 'query   {\nallFilms  {\nfilms  {\nid  \ntitle  \nreleaseDate  \n}\n}\n}',

переменные: null, parse: [Функция: parse]}

Если вы запустите тот же запрос в Altair и проверите запрос, который был отправлен на вкладке сети devtools, вы увидите:

{"query":"    query films($first: Int) {\n      allFilms(first: $first) {\n        films {\n          id\n          title\n          releaseDate\n        }\n      }\n    }\n","variables":{}}

В редакторе предусмотрена ошибка такого типа: "- error [bucklescript] Это имеет тип: string Но где-то требуется: Js.t ({.. query: string, variables: Js.Json.t}) string"

Как мне разрешить этот промис / тип единицы? Спасибо.

Итак, новый вопрос: почему функция sendQuery () не распознает ключ filmQuery##parse?


person armand    schedule 25.02.2018    source источник
comment
Похоже, вы можете захотеть передать filmQuery в sendQuery вместо переменной query.   -  person Neil Kistner    schedule 25.02.2018


Ответы (1)


Ваш метод sendQuery ожидает тип в форме того, что возвращается из FilmQuery.make(), но вы передаете ему только свойство query, которое является string.

Вы можете исправить это, передав filmQuery as в sendQuery вместо только свойства query из filmQuery, на которое ссылается переменная query.

person Neil Kistner    schedule 27.02.2018