我有一個涉及OAuth 1交互的微服務。我發現自己處於兩次運行具有完全相同起始狀態的Lambda函數具有非常不同的結果(其中狀態被視爲傳入的「事件」,環境變量和來自API網關的「stageParameters」)的情況。作爲泄漏狀態機的Lambda?
這裏有一個CloudWatch的日誌,顯示兩回至後端的運行:
你可以看到,雖然初始狀態是相同的,執行路徑很快改變。在第二種情況下(失敗情況),您會看到日誌條目「Auth state changed:null」......這非常奇怪,因爲實際上,在之前記錄了,即使「處理程序」的第一行代碼是執行。這裏是功能處理程序的開始:
export const handler = (event, context, cb) => {
console.log('EVENT:\n', JSON.stringify(event, null, 2));
那麼這個過早的日誌條目來自哪裏呢?那麼,人們必須假設它在事前處決中有點遺漏。讓我來演示一下......它實際上是一個事件監聽器,它是在之前的執行過程中設置的。此功能與火力地堡DB和它連接這臺第一次交互的跟進:
auth.signInWithEmailAndPassword(username, password)
.then((result) => {
auth.onAuthStateChanged(this.watchAuthState);
其中watchAuthState
功能很簡單:
watchAuthState(user) {
console.log(`Auth state changed:\n`, JSON.stringify(user, null, 2));
}
這似乎意味着,當我運行DB第二次我已經使用Firebase數據庫「初始化」,但顯然身份驗證已失效。我的頭號目標是回到預測狀態模型,並且每次都執行相同的操作。
如果有一些鬼鬼祟祟的方式在資源有用的方式重用Lambda執行之間的緩存狀態,那麼我認爲這也將是有趣的,但前提是我們可以在實現預測狀態機時做到這一點。
我想這是由於您的代碼中的錯誤,由於JavaScript異步調用的不當處理。你可以發佈你的整個Lambda函數嗎? –
不是很容易...它是打字稿和封閉來源。你如何解釋處理函數中的第一行執行不是第一次登錄? – ken
好吧,我明白你現在在說什麼,發佈一個答案。 –