如何在响应后停止Google功能(res.status)

时间:2017-05-12 18:38:32

标签: google-cloud-functions

我编写了一个异步函数,它可以快速响应http触发器,然后继续工作。

我遇到阻塞问题:看起来在res.status('200').send('Message')被发送后,该功能会很快停止。

例如:

exports.functionName = function functionName (req, res) {
  function_promise1(req)
    .then(function(){
      return function_promise2()
    })
    .then(function (response){
      res.status(200).send('Triggered !');
      function_promise3() //Won't be executed ! Or only for few ms.
    })
    .catch(function (e) {
      console.error(e.message);
      res.status(500).send(e.message);
    })
};

Google功能在回复后是否真的停止了,或者我遗失了什么?

2 个答案:

答案 0 :(得分:0)

一旦你打电话"发送",它就结束了。如果需要日志消息,则需要使用日志,而不是http响应。这不仅仅适用于云功能 - 这适用于所有http响应。

答案 1 :(得分:0)

我也面临这个问题。我的解决方案是: -创建两个api,一个是第一个api客户端调用,以便运行主要功能,该功能需要在发送响应后运行。第二个api是实际调用main函数的位置。

app.get("/voterefresh", async (req: any, res: any, next: any) => {
  try {
    fetch("");
    return res.json({ message: "vote refresh script is started !" });
  } catch (err) {
    console.error(err);
    return res.status(500).send({ err });
  }
});

app.get("/script", async (req: any, res: any, next: any) => {
  try {
    await main();
    return res.json({ message: "vote refresh script's done' !" });
  } catch (err) {
    console.error(err);
    return res.status(500).send({ err });
  }
});