久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Javascript異步執行不按順序解決方案

瀏覽:115日期:2023-10-31 16:55:38

案例分析:

比如執行懶加載時候,onscroll 事件觸發多次事件時候會調用多次 ajax 回調事件,由于每個事件返回先后次序并不能保證和觸發前一致,所以在數據響應返回后所添加的數據順序就很在 push 到數組上順序不一致。

例子1:

var res = []; function response(data) { res.push( data );}// ajax(..)是某個庫中提供的某個Ajax函數 ajax( 'http://some.url.1', response ); ajax( 'http://some.url.2', response );

這里的并發“進程”是這兩個用來處理 Ajax 響應的 response() 調用。它們可能以任意順 序運行。

我們假定期望的行為是 res[0] 中放調用 'http://some.url.1' 的結果,res[1] 中放調用 'http://some.url.2' 的結果。有時候可能是這樣,但有時候卻恰好相反,這要視哪個調 用先完成而定。

這種不確定性很有可能就是一個競態條件 bug。

解決辦法

var res = [];function response(data) { if (data.url == 'http://some.url.1') { res[0] = data; } else if (data.url == 'http://some.url.2') { res[1] = data; } }// ajax(..)是某個庫中提供的某個Ajax函數 ajax( 'http://some.url.1', response ); ajax( 'http://some.url.2', response );

不管哪一個 Ajax 響應先返回,我們都要通過查看 data.url(當然,假定從服務器總會返 回一個!)判斷應該把響應數據放在 res 數組中的什么位置上。res[0] 總是包含 'http:// some.url.1' 的結果,res[1] 總是包含 'http://some.url.2' 的結果。通過簡單的協調,就 避免了競態條件引起的不確定性。

例子2:

var a, b; function foo(x) { a = x * 2; baz(); } function bar(y) { b = y * 2; baz(); } function baz() { console.log(a + b); }// ajax(..)是某個庫中的某個Ajax函數 ajax( 'http://some.url.1', foo ); ajax( 'http://some.url.2', bar );

在這個例子中,無論 foo() 和 bar() 哪一個先被觸發,總會使 baz() 過早運行(a 或者 b 仍處 于未定義狀態);但對 baz() 的第二次調用就沒有問題,因為這時候 a 和 b 都已經可用了。

要解決這個問題有多種方法。這里給出了一種簡單方法:

var a, b;function foo(x) { a = x * 2; if (a && b) { baz(); } }function bar(y) { b = y * 2; if (a && b) { baz(); } }function baz() { console.log( a + b );}// ajax(..)是某個庫中的某個Ajax函數 ajax( 'http://some.url.1', foo );ajax( 'http://some.url.2', bar );

包裹baz()調用的條件判斷if (a && b)傳統上稱為門(gate),我們雖然不能確定a和b 到達的順序,但是會等到它們兩個都準備好再進一步打開門(調用 baz())。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 91在线区 | 国产精品久久久久久久久久久久久久 | 欧美日韩最新 | 日韩精品一区二区三区在线 | 亚洲视频一区在线 | 北条麻妃一区二区三区在线 | 毛片综合 | 国产成人午夜 | 噜噜噜噜噜在线视频 | 欧美九九九| 久久久av一区 | 久久精品伊人 | 91午夜在线 | 国产区免费观看 | 欧美精品区 | 日本电影www| 在线欧美亚洲 | 亚洲日本乱码一区两区在线观看 | 欧美一区二区三区视频 | 免费一区二区三区 | 亚州中文 | 欧美精品一区在线发布 | 操老逼| 欧美一区二区三区精品 | 这里只有精品视频 | 久久伊人影院 | 九九九色 | 国产在线拍 | 日本一区视频在线观看 | 亚洲成人免费视频在线观看 | 日本激情视频在线播放 | 躁躁躁日躁夜夜躁 | 精品在线不卡 | 国产区视频 | av在线中文| 亚洲成人免费观看 | 亚洲精品66 | 91精品国产综合久久久久久 | 狠狠色综合色综合网络 | 国产看片网站 | 一区二区三区精品 |