Firebase函数——如何处理在express应用程序准备好导出之前需要等待异步进程结束的问题

Firebase函数——如何处理在express应用程序准备好导出之前需要等待异步进程结束的问题,firebase,google-cloud-functions,apollo,Firebase,Google Cloud Functions,Apollo,我正试图让阿波罗网关在谷歌的云功能中运行(特别是通过firebase)。使用以下代码运行apollo server在云计算功能上非常简单 const functions = require("firebase-functions"); const { ApolloServer } = require("apollo-server-express"); var app = require("express")(); const server = new ApolloServer({ schema

我正试图让阿波罗网关在谷歌的云功能中运行(特别是通过firebase)。使用以下代码运行apollo server在云计算功能上非常简单

const functions = require("firebase-functions");
const { ApolloServer } = require("apollo-server-express");
var app = require("express")();

const server = new ApolloServer({
schema: buildFederatedSchema([{ typeDefs, resolvers }])
});

server.applyMiddleware({ app });

exports.apollo = functions.https.onRequest(app);
这一切都很好,因为没有异步函数可以等待。但是使用apollo网关,我们确实有一个异步函数,在服务器开始侦听之前需要等待

它使用just expressjs的方式如下:

const { ApolloServer } = require("apollo-server-express");
var app = require("express")();

const gateway = new ApolloGateway({
     serviceList: [{ name: "clients", url:"http://localhost:5000/apollo/graphql" }]
});

(async () => {
  const { schema, executor } = await gateway.load();

  const server = new ApolloServer({ schema, executor });

  server.listen().then(({ url }) => {
    console.log(`I got it to work! So the trick was to put the logic of setting up the federation INSIDE the onRequest piece.

Here's the solution:

var app = require("express")();
var server;
var start_gateway = async () => {
     if (server !== undefined) return;
     const gateway = new ApolloGateway({
         serviceList: [{ name: "clients", url: "http://localhost:4000/graphql" 
                  }]
     });

     const { schema, executor } = await gateway.load();
     server = new ApolloServer({ schema, executor });
     server.applyMiddleware({ app });
     console.log("Made FEDERATED GRAPH");

     return;
};

exports.apollo = functions.https.onRequest(async (req, res) => {
        await start_gateway();
        return await app(req, res);
})
const{ApolloServer}=require(“阿波罗服务器快车”);
var app=要求(“快递”)();
const gateway=新网关({
serviceList:[{名称:“客户端”,url::http://localhost:5000/apollo/graphql" }]
});
(异步()=>{
const{schema,executor}=wait gateway.load();
const server=new服务器({schema,executor});
server.listen().then({url})=>{

log(`我让它工作了!所以诀窍是将建立联合的逻辑放在onRequest块中

以下是解决方案: