Итак, я добавил Firebase в свой проект реакции. Я могу console.log () значения, но я застрял. Как я могу получить значение из .then в graphql.
Это мои настройки в верхней части страницы.
const fs = require('fs');
const { ApolloServer, gql } = require('apollo-server-express');
const express = require('express');
const firebase = require('firebase/app');
require('firebase/firestore');
const config = {
apiKey: "#################",
authDomain: "#################",
databaseURL: "#################",
projectId: "#################",
storageBucket: "#################",
messagingSenderId: "#################",
appId: "#################",
measurementId: "#################"
};
firebase.initializeApp(config);
const firestore = firebase.firestore()
Я использовал этот метод в redux, и он работает. Теперь я пытаюсь получить его в graphql.
export const getFirebasePage = () => {
const firbasePageRef = firestore.collection('pages');
return firbasePageRef.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
const { title, meta, sections } = doc.data();
return {
routeName: encodeURI(title.replace(/\s+/g, '-').toLowerCase()),
id: doc.id,
meta,
sections,
title
};
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
После успешного выполнения обещания я хотел бы иметь возможность добавлять значения в graphql вот так.
//resolver
const Query = {
page: (root, {id}) => ValueFromPromise.pages.get(id)
}
//schema
type Query {
page(id: ID!): Page
}
type Page{
id:ID!
routName: String!,
meta: [Episode!]!,
sections: [Episode!]!,
title, String!
}
Как я могу это сделать? Можно ли это сделать внутри преобразователя следующим образом:
const resolvers = {
Query: {
pages: firbasePageRef.get()
.then(function(querySnapshot) {
return querySnapshot.forEach(function( doc) {
// doc.data() is never undefined for query doc snapshots
const { title, meta, sections } = doc.data();
const data = {
routeName: encodeURI(title.toLowerCase()),
id: doc.id,
meta,
sections
};
console.log(data); //The correct data is login here. I think I need a resolver or another .then. This is were i'm stuck!
return data;
});
}).then(function(results){
return results;
})
}
};
Мой запрос на игровой площадке graphql выглядит так
query{
pages{
title
}
}
И мои результаты выглядят так
{
"data": {
"pages": null
}
}
Когда я регистрирую револьверы, я получаю это
{ Query: { pages: Promise { <pending> } } }