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