當前位置:網站首頁>遞歸以及for循環裏async 和 await 的用法

遞歸以及for循環裏async 和 await 的用法

2022-01-27 17:15:18 前端紙飛機

遞歸?

一般便是會問以下幾點

1.什麼是遞歸

廣義上:程序調用自身的編程技巧稱為遞歸( recursion),他是個算法。
有幾個要素:遞歸需要有邊界條件、遞歸前進段、遞歸返回段。

2.遞歸能够解决什麼問題

階乘(面試常問),菲波拉鍥數(面試常問)、等
階乘的公式是:  n! = 1 * 2 * 3 * 4 * ... * (n-2) * (n-1) * n

3.怎麼實現一個遞歸

//例如:計算5的階乘
	function jie(n){
    
    if(n == 1){
    //跳出條件
        return 1;
    }
    return n*jie(n-1); //5*jie(4)
}
var result = jie(5);
console.log(result);

for循環裏調用async await

需求,遍曆一個數組,請求後臺接口挨個改變數組每一項,全部改變後再次提交。

function getData(n){
    //通過該接口改變數據
    // console.log('n',n)
    return  new Promise((resolve,reject)=>{
    
        setTimeout(()=>{
    
            resolve(n+1)//原來的數據上+1
        },400)
    })
}

let data = [0,1,2,3,4,5,6,7,8,9]

async function subData(){
    //提交數據保存
    for(let i = 0;i<data.length;i++){
    
        const res = await getData(data[i])
        console.log(res)
    } //改變數據

    console.log('sub')//提交數據
}

subData()

在這裏插入圖片描述
改用遞歸的方式:

function getData(n){
    //通過該接口改變數據
    // console.log('n',n)
    return  new Promise((resolve,reject)=>{
    
        setTimeout(()=>{
    
            resolve(n+1)//原來的數據上+1
        },400)
    })
}

let data = [0,1,2,3,4,5,6,7,8,9]

async function digui(index,arr){
    
    if(index<data.length){
    
       let res = await getData(data[index])
       console.log(res)
       arr.push(res)
       await digui(index+1,arr)
    }

    return arr
}

async function subData(){
    
    const newList = await digui(0,[])
    // console.log(newList)
    console.log('sub')
}

subData()

在這裏插入圖片描述
大概就這麼些了,希望對你有幫助。

版權聲明
本文為[前端紙飛機]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271715181770.html

隨機推薦