亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何循環進行異步獲???循環變量無法確定?

如何循環進行異步獲???循環變量無法確定?

慕慕森 2019-03-09 20:20:54
需求:利用Github V3版本的API,獲取某個用戶star的項目個數。而用戶的api并沒有單獨提供star個數,而是提供了這樣的接口"starred_url": "https://api.github.com/users/tj/starred{/owner}{/repo}"查了一下,,github api采用分頁技術,如果用上述默認接口,最多只能返回30條內容。因而需要利用參數獲取:https://api.github.com/users/tj/starred?page=1&per_page=100,per_page最大可為100.也就是說我需要這樣GET多個接口,直到獲取的接口返回[ ]:axios.get(`/users/${app.userName}/starred?page=${i++}&per_page=100`)循環程序是同步執行的,GET請求是異步獲取。然而我的循環變量與異步獲取的數據有關!那么循環代碼要怎么寫呢?下面是我用遞歸寫的代碼,不過處理得很慢。。這是demo,可以輸入tj試一下,很慢的。let starredLists = []                      !function getStarred(index){     axios.get(`/users/${app.userName}/starred?page=${index++}&per_page=100`)         .then(function(response){             starredLists.push(...response.data)            console.log(starredLists.length + '   ' + index)            if(response.data.length == 100)                 getStarred(index);            if(response.data.length != 100)                 app.stars = starredLists.length;         }) }(1)
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

一定要循環么 用遞歸請求唄

查看完整回答
反對 回復 2019-03-09
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

用了遞歸的方式,解決了循環變量無法確定的問題;
同時為了性能,用Promise.all()做了批量請求。獲取3個組10個接口(以tj大神的star為例)需要大約10s

//get user's starred repos   let starredLists = [];let promiseTen = [], 
    promiseOne;

!function getStarred(index) {    //用for循環,一次性請求十個接口,加快速度,避免同步-異步-同步的反復切換
    for (let i = 0; i < 10; i++) {
        promiseOne = axios.get(`/users/${app.userName}/starred?page=${index++}&per_page=100`)
            .then(function (response) {
                starredLists.push(...response.data)
            })
        promiseTen.push(promiseOne)
    }    Promise.all(promiseTen).then(() => {        if(starredLists.length % 100 == 0)      //檢查是否需要遞歸
            getStarred(index)                       
        else 
            app.stars = starredLists.length        
    })
}(1)


查看完整回答
反對 回復 2019-03-09
  • 2 回答
  • 0 關注
  • 456 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號