Javascript 如何将Firebase承诺值返回到graphql?
因此,我将Firebase添加到我的react项目中。我能够控制台.log()的值,但是,这就是我被卡住的原因。如何从.then中获取值并将其转换为graphql 这是我在页面顶部的设置Javascript 如何将Firebase承诺值返回到graphql?,javascript,firebase,google-cloud-firestore,graphql,create-react-app,Javascript,Firebase,Google Cloud Firestore,Graphql,Create React App,因此,我将Firebase添加到我的react项目中。我能够控制台.log()的值,但是,这就是我被卡住的原因。如何从.then中获取值并将其转换为graphql 这是我在页面顶部的设置 const fs = require('fs'); const { ApolloServer, gql } = require('apollo-server-express'); const express = require('express'); const firebase = require('fire
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;
})
}
};
const resolvers = {
Query: {
pages: () => getPagePromise
}
};
我在graphql游乐场中的查询如下所示
query{
pages{
title
}
}
{
"data": {
"pages": null
}
}
我的结果是这样的
query{
pages{
title
}
}
{
"data": {
"pages": null
}
}
当我记录左轮手枪时,我得到了这个
{ Query: { pages: Promise { <pending> } } }
{Query:{pages:Promise{}}
经过一些努力和决心,我终于解决了这个问题。
在函数中,我定义了一个新的数组调用让newQueryData=[]
并在.forEach
函数中添加新数组newQueryData.push(数据)
最后我返回了新数组returnnewquerydata代码>。我不需要另一个。然后。这是我的最终代码
我从graphql解析器中取出了大部分代码,如下所示
const firbasePageRef = firestore.collection('pages');
const getPagePromise = firbasePageRef.get()
.then((querySnapshot) => {
let newQueryData = [];
const queryData = 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,
title
};
newQueryData.push(data);
})
return newQueryData;
});
接下来,我编辑了graphql解析器,如下所示:
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;
})
}
};
const resolvers = {
Query: {
pages: () => getPagePromise
}
};
现在在graphql游乐场,这是我的结果
{
"data": {
"pages": [
{
"title": "Home Page"
}
]
}
}
伙计们,我希望这能帮助任何有相同或类似问题的人。这是Firebase到graphql