【问题标题】:Why this cloud function takes LONG time?为什么这个云功能需要很长时间?
【发布时间】:2019-01-12 16:14:44
【问题描述】:

这是一个非常简单的云函数。它肯定会返回一些东西(“成功”)然后为什么它需要超过 60 秒导致超时错误

exports.confirmOrder = functions.https.onCall(async (data, context) => { 

    await new Promise((res,rej)=>{

    return true;

    }).then(()=>{

      console.log("llllllllllllllllllllllllllllllllll");

    }).catch((err)=>{

      console.log(err);

    });

    return "successful";

      });

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    一个可调用的云函数在它向调用者返回响应时完成。如果你不能同步返回一个值,你应该返回一个带有该值的 promise。

    您的代码不会返回任何响应(既不是值也不是承诺),因此 Cloud Functions 无法知道何时完成。在这种情况下,它可以让它运行尽可能长的时间/配置(默认为 60 秒)。

    这应该更接近你想要的:

    exports.confirmOrder = functions.https.onCall(async (data, context) => { 
    
        return new Promise((resolve,reject)=>{
          return true;
        }).then(()=>{
          console.log("llllllllllllllllllllllllllllllllll");
          resolve();
        }).catch((err)=>{
          console.log(err);
          reject()
        });
    });
    

    请注意,new Promise() 在 Cloud Functions 代码中非常不习惯,因为您调用的大多数库/API 已经返回了 Promise。考虑到代码的性质,我假设您只是在测试 Promise 的工作原理。

    【讨论】:

    • 在您的代码中,我如何向客户端发送一些数据,例如“成功”字符串。我认为返回的承诺仅限于服务器。如果我返回 json 对象而不是字符串(此处为“成功”),那么它会正常工作吗?
    • 要将结果发回给调用者,请将resolve() 替换为resolve("successful")
    • 好的,我在我的代码gist.github.com/ak1542/86f886751cb81a3e284def504cb4a957 中添加了您的代码,但它对我也不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2011-04-22
    • 1970-01-01
    • 2012-04-29
    • 2020-11-08
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多