Lastor
coding 好謎啊,一個 AngularJS 的頁面上測試站發現有 bug,可是我在本地用同樣的操作卻一切正常
Lastor
已經排除不是本地資料庫跟測試站資料庫不同的問題,我現在很確定是前端 AngularJS 的鍋
Lastor
稍微打了幾個 console.log 再扔到測試機上,發現了神奇的現象
Lastor
大致上是有個 read 頁跟 edit 頁,裡面有共用一個 A 組件
Lastor
read 頁與 edit 頁會傳不同的 data 給 A 組件去顯示資料
Lastor
神奇的地方來了,log 出來的結果表明,在 edit 頁時 log 出來的居然是 read 頁的資料
Lastor
從 network 去看 API,確實只有打 edit 頁的資料
Lastor
甚至直接在 edit 頁重新整理,拿到的依舊是 read 頁的資料,可是根本沒有打 read 頁的 API
Lastor
那這資料到底從哪來的,活見鬼
Lastor
這邊前端大家都對 AngularJS 不是很熟,每次要改這邊的東西都各種吐血
Lastor
而且我在本機上完全無法重現這個 bug
Lastor
難道是 build 的時候編譯錯了嗎!? 如果是這樣,那很難 debug 啊.......
Lastor
偏偏這包專案前端 build 的邏輯是後端 Ruby on Rails 控制的,我看不懂啊
Lastor
================
肯,我找到原因了,是 race condition
Lastor
有兩支 API 打完之後都會去改同一個 state
Lastor
至於是 API A 先回來,還是 API B 先回來是無法保證的,就造成 state 最終會長得不一樣,導致 UI 顯示錯誤
Lastor
昨天原本有在猜是不是這問題,這是我唯一想到的可能性,但是我以為這頁控制目標 state 的 API 只有 1 支
Lastor
剛翻半天才找到另一支的寫法問題,導致在 VScode 搜尋不到.... 一行一行去追才發現
載入新的回覆