發現了一個與去抖輸入和處理響應相關的錯誤。用於處理Angular中最新的異步請求響應的模式?
我有一個搜索輸入,可以在您輸入時查詢服務器。我把它的反彈設置爲300ms。但是,有時會出現一些奇怪的行爲:
用戶類型「ab」等待300ms,在第一個請求解析之前鍵入「c」。在搜索欄中他們看到「abc」,但現在有兩個網絡請求。有時第二個請求(「abc」)首先解析,然後第一個請求(「ab」)解析並覆蓋結果列表。因此,用戶看到「ab」的結果列表,但搜索輸入具有「abc」。
這看起來似乎不是一個反彈本身的問題,更多的是尋找放棄「舊」承諾的方式,以便在解決時可以忽略它們。
因此,例如- 我想要
- 類型
"ab"
- 發送請求 「AB」
- 類型
"c"
- 發送請求 「ABC」
- 「ABC」返回響應,處理承諾分辨率
- 「AB」返回響應,忽略承諾
是否有任何共同的模式/接近了這樣的事情在角?這聽起來像是一個普遍的問題。
E.g「僅解決創建的最新承諾」?
你可以提供理解你的代碼? – Grundy
用'Promises'解決這個問題的確很困難。上面描述的問題是將'RxJS'引入到您的應用程序中的完美用例。使用'RxJS',你有''distinctUntilChanged()'和'switchMap()'等操作符來解決這個問題。 – Dieterg
您可以創建隊列,請參閱http://stackoverflow.com/questions/26859275/make-a-jquery-function-wait-till-its-previous-call-has-been-resolved/。雖然問號標籤'jquery'模式也可以使用原生的'Promise' – guest271314