Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何实现递归承诺?_Javascript_Promise_Es6 Promise - Fatal编程技术网

Javascript 我如何实现递归承诺?

Javascript 我如何实现递归承诺?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我编写了一个重试机制,它应该返回一个承诺: private connect(): Promise<any> { return new Promise((resolve, reject) => { if(this.count < 4) { console.log("count < 4, count:"+this.count); this.count++; re

我编写了一个重试机制,它应该返回一个承诺:

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");
            }
        });
    }

我想调用count
=4
resolve
来触发上述“then”。

尝试将计数传递到connect

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");
            }
        });
    }
专用连接(计数=0):承诺{
返回新承诺((解决、拒绝)=>{
如果(计数<4){
console.log(“计数<4,计数:+count”);
返回此。连接(++计数);
}否则{
决定(“是”);
}
});
}

尝试将计数传递到connect

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");
            }
        });
    }
专用连接(计数=0):承诺{
返回新承诺((解决、拒绝)=>{
如果(计数<4){
console.log(“计数<4,计数:+count”);
返回此。连接(++计数);
}否则{
决定(“是”);
}
});
}

您需要用新的解决内部承诺,
返回此。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");
    }
  });
}

您需要用新承诺解决内部承诺,
返回此承诺。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");
    }
  });
}

“我希望一次计数>=4,并调用resolve触发上述”然后“”-尝试重新表述此句子。您可以找到多个顺序链接承诺的详细承诺工作流,每个承诺在拒绝之前尝试5次。通过递归计数传递实现。“我希望一次计数>=4,并调用resolve来触发上述“然后”-尝试重新表述此句子。您可以找到多个顺序链接承诺的详细承诺工作流,每个承诺在拒绝前尝试5次。通过递归计数传递实现。更好的是:从
count=4开始,在
count>0
时递减,这样重试次数就可以更改。无需传递计数,OP似乎有
count
属性定义为
t
对象的一部分。无论如何,这也行不通。啊,是的,承诺没有解决@dfsq的解决方案会起作用,但您需要确保重置
此。计数
,否则每次都会得到解决(除非这是您需要的行为)。更好的方法是:从
count=4开始,在
count>0
时递减,这样可以更改重试次数无需通过计数,OP似乎将
count
属性定义为
t
对象的一部分。无论如何,这也行不通。啊,是的,承诺没有解决@dfsq的解决方案将起作用,但您需要确保重置此。计数,否则每次都会得到解决(除非这是您需要的行为)。为什么不使用拒绝?这个问题是否有具体的原因或模棱两可之处?如果没有理由-我很想知道怎么做=)为什么不使用拒绝?这个问题是否有具体的原因或模棱两可之处?如果没有理由-我很想知道怎么做=)