首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在返回promise时,我在这个递归函数中做错了什么

在返回promise时,你可能在递归函数中遇到了以下问题:

  1. 忘记使用return关键字:在递归函数中,每次调用自身时,需要使用return关键字将递归函数的返回值返回给上一级调用。如果忘记使用return,递归函数将无法返回结果。
  2. 没有正确处理递归终止条件:递归函数必须有一个终止条件,以避免无限递归。如果没有正确处理终止条件,递归函数将无法停止,导致栈溢出或无法获取正确的结果。
  3. 异步操作没有正确处理:如果递归函数中包含异步操作(如网络请求或文件读取),需要确保在异步操作完成后再返回promise。可以使用async/await.then()方法来处理异步操作。
  4. 没有正确处理异常情况:在递归函数中,可能会出现异常情况,如网络请求失败或文件不存在。需要正确处理这些异常情况,可以使用try/catch语句或.catch()方法来捕获并处理异常。
  5. 没有正确处理参数传递:在递归函数中,如果需要传递参数给下一次递归调用,需要确保参数传递正确。可以使用函数参数或闭包来传递参数。

总结起来,在返回promise时,你需要注意正确使用return关键字、处理递归终止条件、处理异步操作、处理异常情况和正确传递参数。这样才能确保递归函数能够正常返回promise并得到正确的结果。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Javascript之也来手写一下Promise

“reason”是一个用来表示Promise什么被reject的原因,的值。   就这些,但是稍微解释下,promise是指Promise这个整体,它可以是一个构造函数,也可以是个对象。...而这个executor又传回去了两个函数参数,可以让我们new Promise传递的executor的内部去调用: 1 const p1 = new Promise((resolve, reject...为什么this.then又调用了p.resolve并且传了finally的finallyCallback回调?直接这样写不行么?...首先,promisify返回了一个函数,那么这个返回函数,就是我们例子的A方法,A传入的参数1,2也同样promisify返回的function通过rest参数来处理的,从而获取到我们传入的参数...然后,我们返回函数内部又返回了一个Promise

58240

ES6—new Promise()讲解,Promise对象是用来干嘛的?应该怎么用?使用场景有哪些?

所以我们用Promise的时候一般是包在一个函数需要的时候去运行这个函数,如: function runAsync(){ var p = new Promise(function...2.resolve(‘随便什么数据’);这是干毛的? 我们继续来讲。我们包装好的函数最后,会return出Promise对象,也就是说,执行这个函数我们得到了一个Promise对象。...()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们runAsync调用resolve传的的参数。...这时候你应该有所领悟了,原来then里面的函数就跟我们平时的回调函数一个意思,能够runAsync这个异步任务执行完成之后被执行。...不过它还有另外一个作用:执行resolve的回调(也就是上面then的第一个参数),如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法

1.1K20

链式操作的用法reject的用法catch的用法all的用法race的用法

所以我们用Promise的时候一般是包在一个函数需要的时候去运行这个函数,如: function runAsync(){ var p = new Promise(function(resolve...2.resolve('随便什么数据');这是干毛的? 我们继续来讲。我们包装好的函数最后,会return出Promise对象,也就是说,执行这个函数我们得到了一个Promise对象。...()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们runAsync调用resolve传的的参数。...不过它还有另外一个作用:执行resolve的回调(也就是上面then的第一个参数),如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法。...有了all,你就可以并行执行多个异步操作,并且一个回调处理所有的返回数据,是不是很酷?

4.3K20

Promise 毁掉地狱

()) 程序设计,是可以通过函数的__递归__来实现循环语句的。...这个实现的简单版本已经实现没问题,但是最上面的正在加载还在,那我们怎么函数外部知道这个递归的结束,并隐藏掉这个 DOM 呢?...并且会记录调用失败的参数,最后返回函数外部。另外大家可以思考一下为什么 catch 要在最后的 then 之前。...Promise.all(iterable) 方法指当所有可迭代参数的 promises 已完成,或者第一个传递的 promise(指 reject)失败返回 promise。...{: "[object Promise]3"} 这个结果返回的就会很诡异了,我们回看上边的reduce的函数签名 对每一项元素执行的回调函数返回值将被累加到下次函数调用 然后我们再来看代码

1.9K20

大白话讲解Promise(一)一文 的学习+新领悟

Promise定义,必须传递一个函数,否则报错;   该函数有两个参数,这个参数也是函数,这两个函数应该是内部生成并传递进去的。...('随便什么数据');     }, 2000); }); 定义后,这个Promise会直接执行的。...//return new Promise(function(){});    返回另一个Promise 。  测试这个new Promise是否和then返回后的Promise不是同一个。...这一点没问题 但还说“如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法” 经过chrome,node,edge里面测试结果,这个说法是不对的。...不知道原来是怎么测试的,当时可能是Promise的构造函数写的异常,就以为原作者写的不对!

68120

异步发展流程-手摸手带你实现一个Promise

回调函数 解析lodash的after函数 解析Node读取文件 为什么要用promise 手摸手带你撸一个promise 循序渐进讲解从零到一实现一个promise 面试常考点,也请带着问题阅读。...并且异步操作存在以下三个问题 1、异步没法捕获错误 2、异步编程,可能存在回调地狱 3、多个异步操作,同一间内,如何同步异步的结果? 回调地狱大家应该非常熟悉了。...成功或者失败执行的返回值 和promise2的关系 _resolvePromise (promise2, x, resolve, reject) { // 这个处理函数 需要处理的逻辑韩式很复杂的...// 有可能这个x 是一个promise 但是这个promise并不是自己的 resolve(x) // 目前只做一个简单处理 } } 使用 let Promise = require..., x, resolve, reject) x为一个普通值 x为promise2会导致循环调用 x为一个对象或者函数 x为一个promise 考虑以上进行完善 // 内部核心方法 处理 成功或者失败执行的返回

90320

个人笔记(js+css篇一)

参数函数被执行的过程,如果在其内部调用resolve,会将p的状态变成fulfilled,或者调用reject,会将p的状态变成rejected,这个状态一旦完成后就不可改变。...不过它还有另外一个作用:执行resolve的回调(也就是上面then的第一个参数),如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法。...async 起什么作用 这个问题的关键在于,async 函数是怎么处理它的返回值的 我们当然希望它能直接通过 return 语句返回我们想要的值,但是如果真是这样,似乎就没 await 什么事了。...async 函数(包含函数语句、函数表达式、Lambda表达式)会返回一个 Promise 对象,如果在函数 return 一个直接量,async 会把这个直接量通过 Promise.resolve(...因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数返回值——这也可以说是 await 等 async 函数,但要清楚,它等的实际是一个返回值。

51620

2023的前端面试小结_2023-05-19

代码如下:Promise.reject(new Error(“错了,请原谅俺!!”))...;就是下面的代码new Promise的简单形式:new Promise(function(resolve,reject){ reject(new Error("错了!"))...不过catch方法还有一个作用,就是执行resolve回调函数,如果出现错误,抛出异常,不会停止运行,而是进入catch方法。...什么是尾调用,使用尾调用有什么好处?尾调用指的是函数的最后一步调用另一个函数。代码执行是基于执行栈的,所以当在一个函数里调用另一个函数,会保留当前的执行上下文,然后再新建另外一个执行上下文加入栈。...(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)(4)判断函数返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

45770

Promise用法及使用案例

所以我们用Promise的时候一般是包在一个函数需要的时候去运行这个函数,如: function runAsync(){ var p = new Promise(function(resolve...()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们runAsync调用resolve传的的参数。...这时候你应该有所领悟了,原来then里面的函数就跟我们平时的回调函数一个意思,能够runAsync这个异步任务执行完成之后被执行。...2 数据2 直接返回数据 4.reject的用法 到这里,你应该对“Promise什么玩意”有了最基本的了解。...不过它还有另外一个作用:执行resolve的回调(也就是上面then的第一个参数),如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法

46130

promise源码详解,助力你轻松掌握promise

callback 最早处理异步的方法就是callback,就相当于我让你帮我扫地,我会在给你发起任务给你一个手机,之后自己的事情去,不用等你,等你扫完地就会打手机给我,诶,就知道了地扫完了。...是异步操作,需要在我们之前定义的回调函数数组添加一个回调函数。...这也是Promise的重头戏,来介绍一下,我们在用Promise的时候可能会发现,当then函数return了一个值,我们可以继续then下去,不过是什么值,都能在下一个then获取,还有,当我们不在...:首先在Promise/A+写了需要判断这两者如果相等,需要抛出异常,就来解释一下为什么,如果这两者相等,我们可以看下下面的例子,第一次p2是p1.then出来的结果是个Promise对象,这个Promise...5.为什么递归去调用resolvePromise函数

49550

promise源码详解,助力你轻松掌握promise

callback 最早处理异步的方法就是callback,就相当于我让你帮我扫地,我会在给你发起任务给你一个手机,之后自己的事情去,不用等你,等你扫完地就会打手机给我,诶,就知道了地扫完了。...是异步操作,需要在我们之前定义的回调函数数组添加一个回调函数。...这也是Promise的重头戏,来介绍一下,我们在用Promise的时候可能会发现,当then函数return了一个值,我们可以继续then下去,不过是什么值,都能在下一个then获取,还有,当我们不在...:首先在Promise/A+写了需要判断这两者如果相等,需要抛出异常,就来解释一下为什么,如果这两者相等,我们可以看下下面的例子,第一次p2是p1.then出来的结果是个Promise对象,这个Promise...5.为什么递归去调用resolvePromise函数

96510

新手们容易Promise上挖的坑~

每一个函数只会在前一个 promise 被调用并且完成回调后调用,并且这个函数会被前一个 promise 的输出调用,稍后我们在这块更多的讨论。...并且 Promise.all() 会将执行结果组成的数组返回到下一个函数,比如当你希望从 PouchDB 获取多个对象,会非常有用。...因此如果你在你的代码中使用了这个词 (不会把这个词重复第三遍!),你就做错了。下面是说明一下如何避免它。...另一种策略是使用构造函数声明模式,它在用来包裹非 promise API 非常有用。举例来说,为了包裹一个回调风格的 API 如 Node 的 fs.readFile ,你可以简单的这么: ?...当我们 then() 函数内部: ? 我们可以做什么呢?有三种事情: return 另一个 promise return一个同步的值(或undefined) throw一个同步异常 就是这样。

1.5K50

ES6 Promise详解之缝合红宝书ES6标准入门

什么Promise 所谓Promise简单来说就是一个容器,里面保存着未来才会结束的事件(通常是异步操作)的结果。...只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。...的基本API .then() then方法定义原型对象Promise,prototype上,它的作用是为Promise实例添加状态改变的回调函数。...如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法 Promise 对象的错误具有"冒泡"性质,会一直向后传递,直到被捕获为止。...'爱' ] console.log(data.join("")); // 爱 }).catch((error)=>{ //只要执行p1,p2其中一个报错,就会执行这里的代码

62630

手动实现PromiseA+

Promise 构造函数接收一个 exector 函数,当构造实例这个函数会 立即执行。下面一个初级版的 promise 实现。...处理异步代码 通过上面分析,了解到,调用 then ,this.status 可能还是 PENDING 状态,说明是异步函数使用 promise。... Promise ,上一次 then 方法返回的值会作为下一次 then 方法的回调的参数。...then 方法返回的值有三种: 成功回调或者失败回调抛出异常,会走到下一次 then 的失败回调里; 成功或失败返回的是还是一个 promise,那么会用这个返回的)promise 的状态作为结果...多次对 called 变量判断,这是为了防止多次调用,一旦失败就 reject 出去,不再递归调用。

47110

手写async,await 理解内部原理

async await 底层并不是新东西,只是用起来比Generator函数更舒服的api... await等待什么 我们先看看下面这代码,这是async await的最简单使用,await后面返回的是一个...那这个是怎么实现的呢? 原理实现 先看下面代码,输出什么?...g.next().value.then(()=>{ 28 co(g) 29 }) 30} 31 32co(gen) 再来看看打印结果,发现了一个报错 图片 可以发现成功执行了,但是为什么错了...而实际上返回第三次就表示已经返回done,代表结束了,所以,我们需要判断是否是已经done了,不再让它继续递归 所以可以改成这样 最终版 1function* getResult(params) { 2...完美,这个co其实也是大名鼎鼎的co函数的简单写法 结论 async内部就是帮我们执行了co函数,根据resolve时机自动调用Generator.next(),实现await的等待执行,啊真香

71910

读 koa2 源码后的一些思考与实践

使用koa编写web应用,可以免除重复繁琐的回调函数。 koa2 的优点 优点这个东西,直接说它多好,你可能又不开心,但是我们可以对比哦!...listen 函数,并且没有暴漏出http 服务的创建,说明listen函数可能创建了服务。...每次执行 use 函数,我们实际是往一个函数数组添加了一个函数,然后再次通过一个 compose 函数,处理添加进来函数的执行顺序,也就是这个 compose 函数实现了洋葱模型机制。...app.use 传入的函数 使用 Promise 函数封装返回,其中第一个参数是我们常用的 ctx, 第二个参数就是 next 参数,next 每次执行之后都会等于下一个中间件函数,如果下一个中间件函数不为真则返回一个成功的...来试试我们自己实现的koa2 使用一下我们自己的 koa2 吧,用它一道常考洋葱模型面试题,想文章如果懂了,输出结果应该不会错了,自己试一下! const KKB = require('.

90810

promise & axios & async_await 关于 Promise

返回最先执行结束的 Promise 任务的结果,不管这个 Promise 结果是成功还是失败; (4)all:如果全部成功执行,则以数组的方式返回所有 Promise 任务的执行结果,如果有错误就返回...,哪有那么麻烦的写法,只需要在末尾catch一下就可以了,因为链式写法的错误处理具有“冒泡”特性,链式任何一个环节出问题,都会被catch到,同时某个环节后面的代码就不会执行了。...【特点】 (1)async声明的函数返回本质上是一个Promise,所以可以用.then (2)async必须声明的是一个function,那么await就必须是在当前这个async声明的函数内部使用...'); return '返回值'; } //async的返回值不管是什么类型本质是一个Promise所以可以用.then demo().then(result=>{ console.log...alert(1) }, 3000) console.log('“等一会”上面的程序执行完在打印'); return '返回值'; } //async的返回值不管是什么类型本质是一个

1.4K20

Promise面试题3控制并发

jpg']),而且已经有一个函数 function loadImg,输入一个 url 链接,返回一个 Promise,该 Promise 图片下载完成的时候 resolve,下载失败则 reject。...首先想到的便是利用递归,就如这篇文章采取的措施一样,代码如下: //省略代码 var count = 0; //对加载图片的函数处理,计数器叠加计数 function bao(){ count...以上代码所有逻辑都写在了同一个函数然后递归调用,可以优化一下,代码如下: var count = 0; // 封装请求的异步函数,增加计数器功能 function request(){ count...来返回最快改变状态的 Promise,然后从数组(promises )删掉这个 Promise 对象实例,再加入一个新的 Promise实例,直到全部的 url 被取完。...并且循环用then链串起了执行顺序。 以上便是关于并发控制的一点点思考,有使用promise的,有不使用promise的,关键在于灵活运用,通过这次梳理,你有哪些思考呢,欢迎留言。

2.6K31
领券