Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Firebase承诺值返回到graphql?_Javascript_Firebase_Google Cloud Firestore_Graphql_Create React App - Fatal编程技术网

Javascript 如何将Firebase承诺值返回到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

因此,我将Firebase添加到我的react项目中。我能够控制台.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;
    })
  }
};
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