为我的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的意义是什么,我现在该怎么办?
答案 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)
是多余的)。