uni-app如何解決在for循環里調用非同步請求獲取數據順序混亂問題?
- 2019 年 10 月 5 日
- 筆記
先前有一次做uni-app的js介面對接時,遇到過這樣的情況,在for循環里,調用一個非同步請求時,返回來的值順序是亂的,因此,在以下的程式碼里,push到數組裡的值,每次的順序可能都是不一樣的,造成這樣一個原因,是for循環是單執行緒的,非同步請求是多執行緒的,f往往在for循環結束了,非同步請求還沒有結束。
that.list = res.datas.class_list; for(var i=0;i<that.list.length;i++){ 在uni-app框架里,遇到這樣的類似程式碼時,可以用遞歸演算法來避免for循環結束了,非同步請求還沒有結束的問題,將上面的程式碼修改成遞歸形式,如下:
that.list = res.datas.class_list; var i = 0; getImg(); function getImg() { if (i >= that.list.length) { return; } that.list[i].tlist = [] var url = "w=goods_class&gc_id=" + that.list[i].gc_id.substring(2); that.thtxb_ajax_request(url, {}).then((res) => { that.tlist.push(res.datas.class_list) i++ getImg(); }) }按照這樣的修改,便可以避免for循環里調用非同步請求出現的問題了。
其他js也可以按照這個思路,用遞歸演算法的思想。