如何实现递归承诺?

How do I implement recursive promises?

我写了一个重试机制,应该return一个承诺:

private connect(): Promise<any> {
      return new Promise((resolve, reject) => {
          if(this.count < 4) {
             console.log("count < 4, count:"+this.count);
             this.count++;
             return this.connect();
            } else {
              resolve("YES");
            }
        });
    }

如果我打电话:

t.connect().then((data:any)=>{ console.log("YES:"+data)});

我希望调用一次 >= 4resolve 能够触发上述 "then".

尝试将计数传递给连接

private connect(count = 0): Promise<any> {
      return new Promise((resolve, reject) => {
          if(count  < 4) {
             console.log("count < 4, count:"+count);
             return this.connect(++count);
            } else {
              resolve("YES");
            }
        });
    }

你需要用新的来解决内心的承诺,return this.connect() 是不够的:

function connect(): Promise<any> {
  return new Promise((resolve, reject) => {
    if (this.count < 4) {
      console.log("count < 4, count:" + this.count);
      this.count++;
      resolve(this.connect());
    } else {
      resolve("YES");
    }
  });
}

请注意,您如何使用 resolve(this.connect()); 的新递归承诺解决问题。

查看下面的演示。

function connect() {
  return new Promise((resolve, reject) => {
    if (this.count < 4) {
      console.log("count < 4, count:" + this.count);
      this.count++;
      resolve(this.connect());
    } else {
      resolve("YES");
    }
  });
}

const t = {count: 0, connect}

t.connect().then(data => console.log(`YES: ${data}`));