Javascript 带有噩梦云功能的Web抓取在本地工作,但在部署时不起作用

Javascript 带有噩梦云功能的Web抓取在本地工作,但在部署时不起作用,javascript,node.js,firebase,google-cloud-functions,nightmare,Javascript,Node.js,Firebase,Google Cloud Functions,Nightmare,我正试图抓取一个JavaScript日历,并在Google云函数(Blaze plan)中返回其事件的JSON数组。下面的函数可以工作,但只有通过Firebase模拟器在本地运行时才能工作。它成功部署,但每次调用都会导致超时。没有在日志或任何内容中抛出错误。Node.js 10上运行的本地和已部署函数。(编辑:我发现提到xvfb的文章要求在没有显示器的情况下使用噩梦,但我不确定如何将其添加到Firebase,甚至安装它) 您可能不希望将async/await与then/catch回调混合使用。这

我正试图抓取一个JavaScript日历,并在Google云函数(Blaze plan)中返回其事件的JSON数组。下面的函数可以工作,但只有通过Firebase模拟器在本地运行时才能工作。它成功部署,但每次调用都会导致超时。没有在日志或任何内容中抛出错误。Node.js 10上运行的本地和已部署函数。(编辑:我发现提到xvfb的文章要求在没有显示器的情况下使用噩梦,但我不确定如何将其添加到Firebase,甚至安装它)


您可能不希望将async/await与then/catch回调混合使用。这可能会打乱您预期的错误处理。这完全可以通过try/catch/await来完成。您可能还想添加一些日志语句,以准确地查看什么是或不是按照您期望的方式执行的。日志语句将打印在哪里?当在本地运行时,它会显示在终端中,但一旦部署,就不会有这样的情况了。你介意在回答中加入try/catch/wait模式吗?我不完全确定我将如何实现这一点。谢谢
const functions = require('firebase-functions');
const Nightmare = require('nightmare'); //latest version   

const retrieveEventsOpts = { memory: "2GB", timeoutSeconds: 60 };
exports.retrieveEventsArray = functions.runWith(retrieveEventsOpts).https.onRequest(async (request, response) => {
  nightmare = Nightmare({show: false})

  try {
    await nightmare
      .goto('https://www.csbcsaints.org/calendar')
      .evaluate(() => document.querySelector('body').innerHTML )
      .then(firstResponse => {
        let responseJSON = parseHTMLForEvents(firstResponse) //Just a function that synchronously parses the HTML string to a JSON array
        return response.status(200).json(responseJSON)
      }).catch(error => {
        return response.status(500).json(error)
      })
  } catch(error) {
    return response.status(500).json(error)
  }
})