【发布时间】:2019-05-25 21:56:53
【问题描述】:
我正在开发一个 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
【问题讨论】:
-
waitForTrack目前不保证返回任何内容。return内部setTimeout不会影响外部代码 -
在你的
setTimeout你的回报不会返回任何东西
标签: javascript angular typescript promise es6-promise