我正在研究Ionic 3项目,这意味着我正在使用Angular 5,ES6,TypeScript。
我正在尝试编写一个返回promise的递归函数,但出现执行错误:
实际上,我正在尝试执行一个功能,该操作要等到条件被验证或超时5秒后才能执行,类似这样的事情 等到(myCondition |超时),然后返回已解决或已拒绝的诺言。
该函数每100毫秒测试一次,如果条件得到验证,它将返回一个已解决的Promise,否则它将进行递归appel直到第50次调用,以便它返回被拒绝的Promise:
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
答案 0 :(得分:0)
问题是setTimeout从不从其主体返回任何结果,因此该解决方案将使用Promise,因为可以在setTimeout的主体中执行reject()或resolve():
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);
});
}