1. 程式人生 > >小程式for迴圈巢狀請求介面問題

小程式for迴圈巢狀請求介面問題

前段時間實現一個小程式滾動載入更多訊息的功能(利用scroll-view實現),其中有幾個需求需要特殊處理,

  1. 點選列表項可以進入詳情;
  2. 點選列表項資料狀態改變;
  3. 詳情返回列表項位置依舊在離開時的地方

如果點選時沒有資料狀態改變那麼可以直接使用onLoad方法可以輕鬆解決,因為要重新整理資料,所以只能講資料請求放在onShow方法中,這樣便造成頁面返回資料不能停留在離開時的位置
首先想到的是利用for迴圈將獲取到已經載入的頁數,從1遞增到離開時的頁數

for(var i=1,i<=pageNum;i++){
    wx.request({
        ...//請求資料與處理
    })
}

然而微信的請求是非同步的,使用var迴圈後i始終為最後一頁.因為小程式支援ES6,直接將var換成let,可是結果和我們預想的不一樣,每次獲取到資料最少的最先返回,使用陣列拼接concat發現順序總是不可預測(可能和資料查詢花費的時間有關)
其實能用for迴圈遍歷的東西都可以使用遞迴的方法替代,只是遞迴的的方法效率會慢一點

function getItems(){
    wx.request({
        ... //
        success:(res)=>{
            if(num < pageNum) {
                getItems(++num);
            }
        }
    })
}
getItems(1
)

這樣雖然可以解決資料載入的問題,但是在IOS下還是沒法回到離開時的位置,這個時候利用scroll-view元件的scroll-top屬性通過bindscroll獲取到高度,然後手動設定一下,這樣所有的問題就解決了

相關推薦

程式for迴圈請求介面問題

前段時間實現一個小程式滾動載入更多訊息的功能(利用scroll-view實現),其中有幾個需求需要特殊處理, 點選列表項可以進入詳情; 點選列表項資料狀態改變; 詳情返回列表項位置依舊在離開時的地方 如果點選時沒有資料狀態改變那麼可以直接使用onLoad

微信程式 for迴圈怎麼取值

外層迴圈正常巢狀,內層迴圈巢狀的時候,把item.swiper_buy作為陣列迴圈wx:for="{{item.swiper_buy}}",然後給item重新命名wx:for-item="cell",內部迴圈的時候,就是{{cell.屬性}} <block wx:

程式for批量資料

js  Page({ data: { objectArray: [{ id: 5,

微信程式多層迴圈,二級陣列遍歷

小程式中的遍歷迴圈類似於angularJS的遍歷。 二級陣列遍歷有一個坑。二級遍歷wx:for迴圈的時候,需要注意。(程式碼如下) JS程式碼: data: { groups: [ [ {

for迴圈 案例列印各種形狀的星星

案例:各種形狀星星列印 //方形 /*    for(var i=0;i<6;i++){         for(var j=0;j<6;j++){ &

for迴圈的使用

雙重迴圈排序     雙重迴圈排序演算法是一種非常簡單的排序演算法,這種演算法很容易讓人理解,也很實用,但是排序的效率很低。基本思路是用第一個數與後面的所有數進行比較,然後把最小的數放到第一個位置,然後用第二個數與後面的所有數進行比較,然後把第二個最小的數放到第二個位置,然後

程式-for迴圈遍歷的使用

.js檔案: Page({ /** * 頁面的初始資料 */ data: { datas:[ { title: '提交申請', txt: '選擇服務型別,填寫基本資訊,提交' }, { title: '材料稽核', txt: '收到電網企業電話,與

元組的,range,for迴圈

# 元祖 只讀列表,可迴圈查詢,可切片。 # 兒子不能改,孫子可能可以改。 # tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') # # print(tu[3]) # # print(tu[0:4]) # # for i in tu: # # print

vue v-for迴圈的探索(二)

使用v-for迴圈的目的就是為了處理大量型別重複的資料,歸根結底是一種有規律的資料,但是有些規律卻不是那麼容易的,很多時候,我們會使用到迴圈,甚至多重迴圈的巢狀,不同的迴圈巢狀對應著不同的json資料的結構,本篇主要講述的是使用v-for迴圈解決部分同,部分不同的情況,主要是

for迴圈for迴圈

for (var i = 0;i < 5; i++) { document.write("外"+'<br/>'); for (var j = 0; j < 3; j++) { document.write("內"+"<br

程式for迴圈物件

<view class="container log-list"> <block wx:for="{{logs}}" wx:for-item="log" wx:key="*this"> <view class="classname"

for迴圈的幾種有意思的圖形

for迴圈巢狀用我自己的大白話來說就是一個外圈的for程式裡面一個套著一個小的for程式,如果在範圍內就來回執行計算,超出了就跳出等待了,反正就是各種for的包含執行差不多的樣子(個人見解,有錯請糾正謝謝!) 今天老師用五行五列的矩陣來講解了這一塊。 然後講述了最關鍵

Java 快速進行物件集合資料比對,For迴圈不應該成為你的選擇

在專案中,我們常常用到兩個集合的資料比對,找到其中不同的資料,在Android裡面基本上資料量也不會太大,往往大家都是直接用for迴圈巢狀搞定,大家有沒有想過 當資料量很大的時候,使用for迴圈巢狀找出不一樣的物件,需要多久。本文將為大家介紹一下如果進行高效的資料比對,以及一些特殊場景的應用,收藏起來,

java基礎for迴圈,各種三角形

直角三角形(實心) System.out.println("直角三角形"); for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ System.out.print("*"); } System.out.p

python之路day04--列表的增刪改查,、元組的、range、for迴圈

列表增刪改查 增加 append li = ['taibai','zy','nvshen'] li.append('aa') print(li) #['taibai', 'zy', 'nvshen', 'aa'] #需求:迴圈,互動,退出 # li = ['taibai','zy'

JavaScript for迴圈for迴圈

迴圈結構的概念 先來看看生活中的一些場景: (1)食堂阿姨打菜:接過顧客的餐盤→詢問菜品→打菜→遞迴餐盤,重複以上過程,直到所有顧客的菜都打完了。 (2)快遞員送快遞:檢視送件地址→趕往目的地→電話告知收件人→收件人簽收→交快遞件,重複以上過程,直到所有需要送的快遞都處理完

dos for迴圈 以及continue和break的討論

一、概述   批處理中經常會需要巢狀的for迴圈,但其用法與c語言是有區別的。在c語言中我們可以很輕鬆的寫出巢狀的for迴圈: int i; int j; for(i=0;i<5;i++) for(j=0;j<i;j++)

for迴圈實現使用 “ * ” 列印直角三角形。

public class Test { public static void main(String[] args) { int i,j; for(i=1;i&l

for迴圈 簡單優化

1 案例描述某日,在JavaEye上看到一道面試題,題目是這樣的:請對以下的程式碼進行優化  Java程式碼   for (int i = 0; i < 1000; i++)       for (int j = 0; j < 100; j++)     

for 迴圈 while 的神奇問題

在Xcode7中寫了一段OC程式碼,在一個for迴圈中嵌套了一個while迴圈。因為for迴圈中有一個非同步執行,我想等非同步執行完,再執行下一個for迴圈,所以用while迴圈做了一個等待。 程式碼如下: BOOL flag = NO; for (id obj in ar