Как сохранить ответ «apollo-fetch» ​​graphql в переменной? - PullRequest
0 голосов
/ 25 апреля 2018

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

const { createApolloFetch } = require('apollo-fetch');

const uri = 'http://localhost:3000';

const query = `{
    Post(id: 1) {
            id
            title
            forename
            surname
    }
}
`;

const apolloFetch = createApolloFetch({ uri });

const returnApolloBody = () => {
    return apolloFetch({query}).
    then(res => res.data)
        .catch(err => {
            throw new Error(err);
        });
};

const responseForename = returnApolloBody().then(result => result.Post.forename);
const responseTitle = returnApolloBody().then(result => result.Post.title);
const responeSurname = returnApolloBody().then(result => result.Post.surname);

module.exports = {
    responseForename: responseForename,
    responseTitle: responseTitle,
    responeSurname: responeSurname,
};

Однако я понял, что это не самый эффективный способ, так как я использую отдельный http-запрос для каждого значения. Я думал, что будет гораздо проще сохранить весь ответ в виде значения JSON, а затем извлечь значения из этой переменной, однако мне не очень повезло. У меня есть следующий код, и значения возвращаются как неопределенные:

const { createApolloFetch } = require('apollo-fetch');

const uri = 'http://localhost:3000';

const query = `{
    Post(id: 1) {
            id
            title
            forename
            surname
    }
}
`;

const apolloFetch = createApolloFetch({ uri });

const returnApolloBody = () => {
    return apolloFetch({query}).
    then(res => res)
        .catch(err => {
            throw new Error(err);
        });
};

const response = returnApolloBody().then(response => response);

const forename = response.then(response => response.Post.forename);
const surname = response.then(response => response.Post.surname);
const title = response.then(response => response.Post.title);


module.exports = {
    forename: forename,
    title: title,
    surname: surname
};

Чего мне не хватает, чтобы позволить мне сохранить весь ответ в const, а затем запросить конкретные свойства в этом const?

Заранее спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Вы должны иметь возможность вернуть результат response.Post как объект, например, ниже я использую apolloclient для получения профиля пользователя

apolloclient.query({
query: q_my_profile}).then(
resp => {
    resolve(resp.data.my_profile);
},
error => {
    reject(error.message);
});
...