javascript - 递归函数返回承诺
问题描述
我正在开发一个 Ionic 3 项目,这意味着我正在使用 Angular 5、ES6、TypeScript。
我正在尝试编写一个返回承诺的递归函数,但出现执行错误:
实际上,我正在尝试执行一个函数,该函数等到条件得到验证或超时 5 秒,类似的事情等到 (myCondition | timeout) 然后返回已解决或被拒绝的承诺。
该函数每 100 毫秒测试一次,如果条件验证它返回一个已解决的承诺,否则它会进行递归调用,直到第 50 次调用,因此它返回一个被拒绝的承诺:
代码:
waitForTrack(flag,callNumber){
if(callNumber < 50){
if (this._audioProvider.tracks.length == flag)
setTimeout(()=>{
return this.waitForTrack(flag,callNumber++)},100)
else
return new Promise((resolve,reject) =>{
resolve();
});
}else{
return new Promise((resolve,reject) =>{
reject();
});
}
}
错误:
core.js:1449 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'then' of undefined
TypeError: Cannot read property 'then' of undefined
解决方案
问题是 setTimeout 永远不会从其主体返回任何结果,因此解决方案将使用 Promise,因为 reject() 或 resolve() 可以在 setTimeout 的主体中执行:
waitForTrack(flag,callNumber){
return new Promise((resolve,reject) =>{
if (this._audioProvider.tracks.length == flag){
resolve();
}else if (callNumber > 49)
reject();
else
setTimeout(()=>this.waitForTrack(flag,callNumber++),100);
});
}
推荐阅读
- php - 在页面模板上使用工作分页的自定义 wp_query
- asp.net-mvc - 使用它是不优雅还是不好的做法
在 asp.net mvc 中,主要是 .netcore 版本,我们有一些 htmlhelper 和 taghelper 帮助我们编写前端代码。
与 taghelpers 或 htmlhelpers 相比,我对纯 html 的亲和力更高。
即使.netcore为此提供了taghelpers或html
- javascript - 您可以从源中出现的属性中检索值吗?
- javascript - Wix.com 查询。过滤多个类别脚本错误
- docker - docker-compose 卷不起作用
- r - 空白页安排_ggsurvplots Rstudio
- jquery - 等待异步 ajax 请求完成,尽管两者都是异步 true
- svg - 动态缩小图像
- sqlite - 使用 IN (SQLite) 在另一个表中搜索相似值
- java - 通过套接字发送命令使 javafx 图形界面显示和隐藏