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

为什么我的带有promises的递归函数只等待一次?

带有promises的递归函数只等待一次的原因可能是由于递归函数中的promise没有正确地进行链式调用或者没有正确地返回promise对象。

在使用带有promises的递归函数时,需要确保每次递归调用都返回一个新的promise对象,并且在每次递归调用之前使用.then()方法将前一个promise与当前递归调用的promise链接起来。这样可以确保每次递归调用都会等待前一个promise的完成。

以下是一个示例代码,展示了如何正确地使用带有promises的递归函数:

代码语言:txt
复制
function recursiveFunction() {
  return new Promise((resolve, reject) => {
    // 执行递归操作
    // ...

    // 递归终止条件
    if (/* 终止条件 */) {
      resolve(/* 结果 */);
    } else {
      // 递归调用
      recursiveFunction().then(resolve).catch(reject);
    }
  });
}

// 调用递归函数
recursiveFunction().then(result => {
  // 处理最终结果
}).catch(error => {
  // 处理错误
});

在这个示例中,递归函数recursiveFunction返回一个新的promise对象,并在递归调用之前使用.then()方法将前一个promise与当前递归调用的promise链接起来。这样,每次递归调用都会等待前一个promise的完成。

请注意,以上示例中没有提及具体的腾讯云产品,因为根据问题要求,不能提及特定的云计算品牌商。但是,腾讯云提供了丰富的云计算产品和服务,可以根据具体需求选择适合的产品来支持开发和部署。

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

相关·内容

为什么你学不会递归?告别递归,谈谈经验

大家好,又见面了,是你们朋友全栈君。 可能很多人在大一时候,就已经接触了递归了,不过,敢保证很多人初学者刚开始接触递归时候,是一脸懵逼当初也是,给我感觉就是,递归太神奇了!...这就是递归最重要三要素,每次做递归时候,你就强迫自己试着去寻找这三个要素。 还是不懂?没关系,再按照这个模式讲一些题。 有些有点小基础可能觉得太简单了,没耐心看?...零基础可能还是不大懂,没关系,之后慢慢按照这个模式练习!好吧,有大佬可能在吐槽太简单了。 案例2:小青蛙跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级。...第一种跳法:第一次跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下n-1个台阶跳法有f(n-1)种。...已经强调了好多次,多练几道了,所以呢,后面也会找大概 10 道递归练习题供大家学习,不过,可能会有一定难度。

61730

OpenCV论道:为什么伽马校正函数只有一行?

大家好,又见面了,是你们朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本思路是这样:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净棋盘;识别棋盘,标定位置...就是提升图像暗部细节。这与加曝处理是不一样,加曝一般不区分图像暗部和亮部。...奇怪是,在网上搜到伽马校正函数看起来都很复杂,即便是 python 写,也都得十几行甚至几十行,可我写伽马校正函数只有一行。为什么会这样呢?是理解不对吗?...、伽马校正(gamma=2)灰度二值化效果、伽马校正(gamma=3)灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

1.1K20

为什么你学不会递归?告别递归,谈谈一些经验

来源:苦逼码农(ID:di201805) ---- 可能很多人在大一时候,就已经接触了递归了,不过,敢保证很多人初学者刚开始接触递归时候,是一脸懵逼当初也是,给我感觉就是,递归太神奇了...这就是递归最重要三要素,每次做递归时候,你就强迫自己试着去寻找这三个要素。 还是不懂?没关系,再按照这个模式讲一些题。 有些有点小基础可能觉得太简单了,没耐心看?...零基础可能还是不大懂,没关系,之后慢慢按照这个模式练习!好吧,有大佬可能在吐槽太简单了。 案例2:小青蛙跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级。...第一种跳法:第一次跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下n-1个台阶跳法有f(n-1)种。...已经强调了好多次,多练几道了,所以呢,后面也会找大概 10 道递归练习题供大家学习,不过,可能会有一定难度。

50710

为什么你学不会递归?告别递归,谈谈一些经验

作者 | 帅地 来源 | 苦逼码农 可能很多人在大一时候,就已经接触了递归了,不过,敢保证很多人初学者刚开始接触递归时候,是一脸懵逼当初也是,给我感觉就是,递归太神奇了!...这就是递归最重要三要素,每次做递归时候,你就强迫自己试着去寻找这三个要素。 还是不懂?没关系,再按照这个模式讲一些题。 有些有点小基础可能觉得太简单了,没耐心看?...零基础可能还是不大懂,没关系,之后慢慢按照这个模式练习!好吧,有大佬可能在吐槽太简单了。 案例2:小青蛙跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级。...第一种跳法:第一次跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下n-1个台阶跳法有f(n-1)种。...已经强调了好多次,多练几道了,所以呢,后面也会找大概 10 道递归练习题供大家学习,不过,可能会有一定难度。

48800

为什么你学不会递归?告别递归,谈谈一些经验

可能很多人在大一时候,就已经接触了递归了,不过,敢保证很多人初学者刚开始接触递归时候,是一脸懵逼当初也是,给我感觉就是,递归太神奇了!...这就是递归最重要三要素,每次做递归时候,你就强迫自己试着去寻找这三个要素。 还是不懂?没关系,再按照这个模式讲一些题。 有些有点小基础可能觉得太简单了,没耐心看?...零基础可能还是不大懂,没关系,之后慢慢按照这个模式练习!好吧,有大佬可能在吐槽太简单了。 案例2:小青蛙跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级。...第一种跳法:第一次跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下n-1个台阶跳法有f(n-1)种。...已经强调了好多次,多练几道了,所以呢,后面也会找大概 10 道递归练习题供大家学习,不过,可能会有一定难度。

92410

为什么你学不会递归?告别递归,谈谈一些经验

作者 | 帅地 来源 | 苦逼码农 可能很多人在大一时候,就已经接触了递归了,不过,敢保证很多人初学者刚开始接触递归时候,是一脸懵逼当初也是,给我感觉就是,递归太神奇了!...这就是递归最重要三要素,每次做递归时候,你就强迫自己试着去寻找这三个要素。 还是不懂?没关系,再按照这个模式讲一些题。 有些有点小基础可能觉得太简单了,没耐心看?...零基础可能还是不大懂,没关系,之后慢慢按照这个模式练习!好吧,有大佬可能在吐槽太简单了。 案例2:小青蛙跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级。...第一种跳法:第一次跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下n-1个台阶跳法有f(n-1)种。...已经强调了好多次,多练几道了,所以呢,后面也会找大概 10 道递归练习题供大家学习,不过,可能会有一定难度。

54430

为什么喜欢它?带有解释推荐系统第二弹

Recurrent Review Generator 递归评论生成器 给定用户评论文档, 我们希望用户评论生成器能生成类似于用户写文档,此处,我们使用seq2seq学习框架: 用户文档编码器; 用户评论生成器...用户评论生成器是希望生成和用户相近评论,而评论判别器则希望能将生成样本和真实评论分开。本文采用卷积形式来进行此操作,具体框架如上图所示。...也就是说生成器目的是尽可能制造能骗过判别器生成样本。 此处我们判别器训练目标为(最大化真实样本,最小化假生成样本): 其中表示从真实评论中采样样本, 表示生成器生成样本。...评论判别器目的是判断评论是不是用户是否给商品上编写。 3. 评分预测上下文-aware矩阵分解 w我们有一个用户商品评分矩阵, 和分别是用户和商品个数。...我们假设所有的评分带有噪音(均值为0,方差为高斯噪音), 所以我们评分为: 如果用户对商品进行评分,那么为1,否则为0.

63120

为什么建议线上高并发量日志输出时候不能带有代码位置

如果大家发现网上有抄袭本文章,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么建议”系列第二篇,本系列中会针对一些在高并发场景下,对于组内后台开发一些开发建议以及开发规范要求进行说明和分析解读...往期回顾: 为什么建议在复杂但是性能关键表上所有查询都加上 force index 在业务一开始上线时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...在上面给出线程堆栈例子中,调用打印日志方法代码位置信息就是这一行:at com.xxx.apigateway.filter.AccessCheckFilter.filter(AccessCheckFilter.java...模拟两种方式获取调用打印日志方法代码位置,与不获取代码位置会有多大性能差异 以下代码参考 Log4j2 官方代码单元测试,首先是模拟某一调用深度堆栈代码: 然后,编写测试代码,对比纯执行这个代码...由此,建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量日志的话,这个日志是不能带有代码位置,否则会造成严重性能衰减。

1.4K20

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

then会等待return后promise,导致自己等待自己,一直处于等待 return reject(new TypeError('循环引用')) } //如果x不是null,是对象或者方法...:首先在Promise/A+中写了需要判断这两者如果相等,需要抛出异常,就来解释一下为什么,如果这两者相等,我们可以看下下面的例子,第一次p2是p1.then出来结果是个Promise对象,这个Promise...对象,但是x(p2)结果还在等待,他却想执行自己then方法,就会导致等待。...5.为什么递归去调用resolvePromise函数?...:相信细心的人已经发现了,这里使用了递归调用法,首先这是Promise/A+中要求,其次是业务场景需求,当我们碰到那种Promiseresolve里Promiseresolve里又包了一个Promise

49650

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

then会等待return后promise,导致自己等待自己,一直处于等待 return reject(new TypeError('循环引用')) } //如果x不是null,是对象或者方法...:首先在Promise/A+中写了需要判断这两者如果相等,需要抛出异常,就来解释一下为什么,如果这两者相等,我们可以看下下面的例子,第一次p2是p1.then出来结果是个Promise对象,这个Promise...对象,但是x(p2)结果还在等待,他却想执行自己then方法,就会导致等待。...5.为什么递归去调用resolvePromise函数?...:相信细心的人已经发现了,这里使用了递归调用法,首先这是Promise/A+中要求,其次是业务场景需求,当我们碰到那种Promiseresolve里Promiseresolve里又包了一个Promise

96510

手写系列-这一次,彻底搞懂 Promise

当我在麦当劳点一份汉堡套餐,收银员会给我一张收据,这个收据就是 Promise,代表已经付过钱了,麦当劳会为做一个汉堡套餐承诺,要通过收据来取这个汉堡套餐。...那么这个买汉堡得到承诺会有以下 3 种状态: 等待状态:刚下单,汉堡还没做好,这时可以在等待汉堡时,同时做其他事情; 成功状态:汉堡做好了,通知取餐; 失败状态:发现卖完了,通知退款; 需要注意是...至于为什么先实现此方法,是为了防止实现其他 api 时会报错。...如果返回是成功 promise,会采用上一次结果;如果返回是失败 promise,会用这个失败结果,传到 catch 中。...' + data) })).catch(e => { console.log('失败结果' + e) }) 控制台等待 1s 后输出:成功结果成功 5.总结 以上,我们实现了一个符合 Promises

17830

手写系列-这一次,彻底搞懂 Promise

当我在麦当劳点一份汉堡套餐,收银员会给我一张收据,这个收据就是 Promise,代表已经付过钱了,麦当劳会为做一个汉堡套餐承诺,要通过收据来取这个汉堡套餐。...那么这个买汉堡得到承诺会有以下 3 种状态: 等待状态:刚下单,汉堡还没做好,这时可以在等待汉堡时,同时做其他事情; 成功状态:汉堡做好了,通知取餐; 失败状态:发现卖完了,通知退款; 需要注意是...至于为什么先实现此方法,是为了防止实现其他 api 时会报错。...如果返回是成功 promise,会采用上一次结果;如果返回是失败 promise,会用这个失败结果,传到 catch 中。...' + data) })).catch(e => { console.log('失败结果' + e) }) 控制台等待 1s 后输出:成功结果成功 5.总结 以上,我们实现了一个符合 Promises

28230

Node.js中常见异步等待设计模式

Node.js中异步/等待打开了一系列强大设计模式。现在可以使用基本语句和循环来完成过去采用复杂库或复杂承诺链接任务。...已经用co编写了这些设计模式,但异步/等待使得这些模式可以在vanilla Node.js中访问,不需要外部库。...记得一次尝试这种模式与合作,感到莫名其妙,它实际工作。但是,下面的就不能正常工作。请记住,await必须始终在async函数中,而传递给forEach()下面的闭包不是async。...没有异步/等待,next()手动调用涉及与重试示例相同递归类型。...)); } 该Promise.all()函数接受一组承诺,并返回一个承诺,等待数组中每个承诺解析,然后解析为一个数组,该数组包含解析原始数组中每个承诺值。

4.7K20

Promise面试题3控制并发

在写这篇文章时候有点犹豫,因为先前写过一篇类似的,一道关于并发控制面试题,只不过那篇文章只给出了一种解决方案,后来在网上又陆续找到两种解决方案,说来惭愧,研究问题总是浅尝辄止,所以今天便放在一起...首先想到便是利用递归来做,就如这篇文章采取措施一样,代码如下: //省略代码 var count = 0; //对加载图片函数做处理,计数器叠加计数 function bao(){ count...,将加载图片函数loadImg封装在bao函数内,根据条件判断,是否发送请求,请求完成后继续递归调用。...,一个函数只负责计数和发送请求,另外一个负责调度。...来返回最快改变状态 Promise,然后从数组(promises )中删掉这个 Promise 对象实例,再加入一个新 Promise实例,直到全部 url 被取完。

2.6K31

Promise.all并发限制

这时候考虑一个场景:如果你promises数组中每个对象都是http请求,或者说每个对象包含了复杂调用处理。而这样对象有几十万个。...那么会出现情况是,你在瞬间发出几十万http请求(tcp连接数不足可能造成等待),或者堆积了无数调用栈导致内存溢出。 这时候,我们就需要考虑对Promise.all做并发限制。...换句话说,就是把生成promises数组控制权,交给并发控制逻辑。...这里并不打算一步步实现这个这个功能,npm中有很多实现这个功能第三方包,比如async-pool、es6-promise-pool、p-limit,这里直接拿async-pool代码来分析一下实现原理...为空数组 if (i === array.length) { return Promise.resolve(); } // 每调一次

1.7K30

前端高频手写面试题

=> 递归递归退出条件:被比较是两个值类型变量,直接用“===”判断被比较两个变量之一为null,直接判断另一个元素是否也为null提前结束递推:两个变量keys数量不同传入两个参数是同一个变量递推工作...wait 秒之后才执行一次,并且最后一次触发事件不会被执行时间戳方式:// func是用户传入需要防抖函数// wait是等待时间const throttle = (func, wait = 50)...() // 将当前时间和上一次执行函数时间对比 // 如果差值大于设置等待时间就执行函数 if (now - lastTime > wait) { lastTime = now...都已经fulfilled或rejected后promise,并带有一个对象数组,每个对象表示对应promise`结果当您有多个彼此不依赖异步任务成功完成时,或者您总是想知道每个promise结果时...实现find方法find 接收一个方法作为参数,方法内部返回一个条件find 会遍历所有的元素,执行你给定带有条件返回值函数符合该条件元素会作为 find 方法返回值如果遍历结束还没有符合该条件元素

1.1K20

手写一个符合Promise A+规范Promise实现

前言 记得之前发过一篇关于Promise文章讲解,不过都不是很深入,只是对使用上理解,所以这次将会带着各位通过JavaScript来实现一个Promise,并且是符合规范,最后可以通过promises-aplus-tests...整个实现主要通过Promise A+规范来做,可以参考以下地址: https://promisesaplus.com/ 正文 接下来内容将直接贴出源码,因为在写时候都以逐行加了注释来说明代码理解...onRejected : (err) => { throw err } // then执行必须返回一个新promise,形成无限链式调用(也就是形成递归) const promise2...) { // 看一下进来参数是不是一个数组 promises = isArray(promises) ?...promises : [] let fulfilledCount = 0 // 状态变完成个数 let promisesLength = promises.length // 需要完成个数

60130

Promise机制

: 如果 x 处于等待态, promise 需保持为等待态直至 x 被执行或拒绝 如果 x 处于执行态,用相同值执行 promise 如果 x 处于拒绝态,用相同据因拒绝 promise x 为对象或函数...thenable 链中对象解决,而 [[Resolve]](promise, thenable) 递归性质又使得其被再次调用,根据上述算法将会陷入无限递归之中。...算法虽不强制要求,但也鼓励施者检测这样递归是否存在,若检测到存在则以一个可识别的 TypeError 为据因来拒绝 promise Promises规范 到目前为止Promises指定了A、B、D、...promise 状态只能由未完成转换成完成,或者未完成转换成失败 。 promise 状态转换只发生一次。...当 resolve(value) 方法被第一次调用时, promise 属性状态变成 完成,所有之前或之后观察该 promise promise 状态都被转变成 完成。

1.4K100
领券