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

简介: 递归以及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()

4cc37279091341628b4d101b51aaa16d.png

改用递归的方式:

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

0b1f96f555af4dbcb79fecc9d7007349.png

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

目录
相关文章
|
开发工具 git
vscode编辑器里怎么显示.git隐藏文件夹到目录里
vscode编辑器里怎么显示.git隐藏文件夹到目录里
1606 0
|
JavaScript API 开发者
使用 u-navbar 组件实现页面导航和布局的完全指南
使用 u-navbar 组件实现页面导航和布局的完全指南
2589 0
|
资源调度 JavaScript 前端开发
【TypeScript】TS 看这一篇就够了
【TypeScript】TS 看这一篇就够了
2493 0
|
2月前
|
SQL 自然语言处理 数据库
为什么多数智能问数项目失败不是因为技术,而是因为业务没想清楚?
本文指出:智能问数项目失败的根因并非技术不足,而是业务定义不清——对象边界模糊、术语口径不一、复合逻辑缺失。本体语义层路线通过结构化表达对象、属性、关系及业务定义,实现“又泛又准”的问数能力;相较预置或NL2SQL路线,其维护成本更可控、扩展性更强。成功前提在于企业愿投入语义治理。
|
JavaScript 定位技术
echars 3D地图为区域自定义颜色
echars 3D地图为区域自定义颜色
echars 3D地图为区域自定义颜色
|
5月前
|
弹性计算 安全 API
零基础玩转OpenClaw(小龙虾):部署(阿里云ECS/本地)、Skills集成、百炼API配置、避坑指南
2026年,开源AI智能体OpenClaw(曾用名Clawdbot、Moltbot,因Logo酷似小龙虾被网友亲切称为“小龙虾”)持续引爆AI圈,GitHub星标数量突破18.3万,成为兼具实用性与扩展性的现象级开源项目。其核心价值在于“本地优先、插件扩展、多端适配”,既能通过阿里云ECS服务器实现7×24小时稳定运行,也能在MacOS、Linux、Windows11本地设备部署,搭配阿里云百炼Coding Plan免费大模型API,再集成各类Skills插件,就能轻松解锁自动化办公、文件管理、多平台协同等全场景能力,真正实现“自然语言指令→AI规划→任务落地”的完整闭环。
1307 0
|
缓存 前端开发 JavaScript
如何优化前端性能:7个实用技巧
在当今互联网高速发展的时代,前端性能优化成为了每个开发者必须面对的挑战之一。本文将介绍7个实用的技巧,帮助前端开发者提升网站性能,提升用户体验。
|
Web App开发 小程序 网络安全
Charles抓包微信小程序请求响应数据
Charles抓包微信小程序请求响应数据
1952 0
|
存储 缓存 JavaScript
一文带你了解vuex和使用(2024年11月)
欢迎来到我的博客,我是自学前端两年半的大一学生,熟悉JavaScript与Vue,正向全栈发展。本篇介绍了Vuex,Vue.js的状态管理模式,包括其核心概念如state、getter、mutation、action及模块化使用,通过集中管理状态确保应用状态的可预测变化。文章详细解析了Vuex的工作原理,特别是与Vue的computed属性和响应式系统的集成,以及如何在实际项目中搭建和使用Vuex。如果你觉得有帮助,欢迎关注,我将持续更新更多技术文章。🎉🎉🎉
1467 0
|
JavaScript 前端开发 API
vue3的传送门teleport究竟有多神奇?suspense发起异步请求有多简约?
该文章介绍了Vue3中新特性Teleport和Suspense的使用方法,演示了如何使用Teleport进行DOM节点的非父子关系传送,以及Suspense在处理异步组件加载时的优雅展示和错误处理技巧。

热门文章

最新文章