2015-11-04 113 views
1

我寫了一個運行良好的雲功能。雲代碼功能運行兩次

有時候這個函數對同一個用戶執行不止一次(我確信只有一個請求是從客戶端的android應用程序請求的)。

經過一些調試後,我發現如果連接不好,會發生這個問題。我可能會或可能不會是正確的。

如何克服這樣的問題?

+0

您有多確定您的功能只能從應用中調用一次?如果您的雲功能失敗,例如超時,會發生什麼? –

+0

我100%確定,因爲它工作正常。然而,在低連接時,這個問題正在發生。我在想這個問題是否與網絡庫實際上觸發了我們提出的一個請求的多個請求有關,以防萬一其中一個請求失敗。你怎麼看? @MoNazemi – SafiS

+0

我不認爲網絡庫會針對請求觸發兩次。順便說一句,你從哪裏調用雲功能?一個iOS應用程序? –

回答

1

在評論中,我也不相信客戶端SDK會在不良連接上覆制Cloud Function調用。預期的行爲是讓他們在客戶端拋出網絡相關的異常,而不是再次調用它。如果Cloud Function成功運行並且客戶端只能無法獲得結果,則會出現問題。

我能想到下面的解決方案,並提供有關雲功能本身並沒有更多的細節:

  1. 儘量使功能冪等 - 這意味着即使運行兩次,最終結果是相同,假設相同的輸入/參數。

  2. 緩存的結果和手動油門功能 - 這是比較複雜的,如果網絡問題仍然存在,你不能變通解決消除功能的副作用時,才需要。您將不得不創建另一個類來緩存函數的結果(可能由參數控制),並返回相同的結果,而無需計算和副作用。