递归以及for循环里async 和 await 的用法

Posted 前端纸飞机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归以及for循环里async 和 await 的用法相关的知识,希望对你有一定的参考价值。

我宁愿你骂我,也不愿意你难过,你难过我会更担心。

递归?

一般便是会问以下几点

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()


大概就这么些了,希望对你有帮助。

以上是关于递归以及for循环里async 和 await 的用法的主要内容,如果未能解决你的问题,请参考以下文章

js循环里的async和await最佳实践

如何在for-each循环中使用async-await? [重复]

Dart:在循环中使用 Async 和 Await

JavaScript中async和await的使用以及队列问题

JS255- 如何在 JS 循环中正确使用 async 与 await

C# async 和 await 理解