云功能何时重试?

时间:2019-06-18 09:22:02

标签: node.js google-cloud-functions

为我的Cloud Function启用了 retries ,我想知道它将在什么情况下重试。

This section对我来说似乎是矛盾的。因此,我以为我听不懂。
我认为以下内容暗示启用了“失败重试”的功能也将在致命错误上重试:

  

Cloud Functions无法理解不应重试的致命错误

但是,在这种情况下捕获错误并使用Promise.reject有什么意义呢?
我尝试使用Promise.reject取消对Cloud Function的重试,但是,这不会发生。

return Promise.reject(..) // will retry
throw Error() // will retry

如果不重新部署该功能,两者都会重试一周。
在我看来,致命错误 Promise.reject重试,但是,文档说:

  

如果支持致命错误,则应相应地修改代码

文档this section的意义是什么,我现在该怎么办?

2 个答案:

答案 0 :(得分:0)

如果在最后出现任何类型的错误,Cloud Functions将重试该函数。这包括被拒绝的承诺,引发的异常或超时。

如果您不希望函数重试,则捕获所有错误并返回成功的Promise。如果您知道以后再也不会出错(例如,错误的输入值),则不要安排重试该错误。否则,您将只对所有无效的重试收费。

重试的全部目的是处理存在临时错误(例如网络问题)的情况。因此,应确保仅在预期某个函数将来会在某个时候成功使用的情况下,您的函数才会产生错误。

如果发现文档令人困惑,请随时使用文档任何页面上的“发送反馈”按钮。

答案 1 :(得分:0)

我认为Google文档中的代码示例完全错误。我建议应该是:

return doFooAsync().catch(err => {
    if (isFatal(err)) {
        console.error(`Fatal error ${err}`);

        return true;
    }

    throw err;
});

如果错误是致命的(您不想重试),请记录错误并返回true(您不需要Promise.resolve(true),因为框架会将返回值包装在Promise中。不是致命的(您想重试),只需重新抛出错误(同样,Promise.reject(err)是多余的)。