Я просто выкладываю это здесь для дальнейшего использования. Я взял несколько месяцев от GraphQL. Когда я вернулся, я кодировал новый распознаватель, и он возвращался с loading
=== false, но data
=== 'undefined'. Решение выявило тонкую деталь в настройке типов и запросов GraphQL, с которыми, вероятно, борется любое количество людей, только изучающих GraphQL.
В поисках ответа я искал много SO-сообщений и других статей, касающихся loading
=== false, но data
=== 'undefined', но не увидел ни одного, описывающего информацию, которую я в моем случае нужно было ее решить.
Вот настройка, которая не работает:
SCHEMA
type BraintreeClientToken{
clientToken: String
}
type query{
getBraintreeClientToken(localUserId: String!): BraintreeClientToken
}
QUERY LIBRARY
Это код с ошибкой
const GETBRAINTREECLIENTTOKEN_QUERY = gql`
query ($localUserId: String!) {
getBraintreeClientToken(localUserId: $localUserId) {
BraintreeClientToken
}
}
`;
RESOLVERS
getBraintreeClientToken: (parent, args, context) => {
const userid = context.userId;
let BraintreeClientToken = {
clientToken: '',
}
return Promise.resolve()
.then(() => {
//CODE HERE THAT CORRECTLY OBTAINS THE CLIENTTOKEN FROM THE BRAINTREE API -- NOT RELEVANT TO THIS POST
return clientToken;
})
.then((clientToken) => {
BraintreeClientToken.__typename = 'BraintreeClientToken';
BraintreeClientToken.clientToken = clientToken.clientToken;
return BraintreeClientToken;
})
.then((BraintreeClientToken) => {
return BraintreeClientToken;
})
.catch((err) => {
console.log(err);
});
}
Посмотрите на код библиотеки запросов. Сначала это выглядело разумно. В конце концов, преобразователь с именем getBraintreeClientToken
возвращает объект с именем BraintreeClientToken
, и у него есть имя типа BraintreeClientToken
. Разве это не должно быть в строке запроса gql
?
[см. Ответ ниже]