递归函数返回promise

时间:2018-12-28 00:26:39

标签: javascript angular typescript promise es6-promise

我正在研究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

1 个答案:

答案 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);
        });
  }