收藏
回答

return new Promise 使用递归,最后没有返回值?

回答关注问题邀请回答
收藏

2 个回答

  • 微盟
    微盟
    2021-12-22

    你好,这代码并没有做到递归,且只有满足resolve判断条件的getBuilds函数Promise实例状态为fulfilled。其他Promise实例的状态均为pending (包含getTag中的)。

    这里有个示例供你参考下:

      let i = 1;
    
    
      function request() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            i += 1;
            resolve(i);
          }, 1000);
        });
      }
    
    
      function recursionFetch() {
        return new Promise((resolve, reject) => {
          request()
            .then((res) => {
              // 满足条件
              if (res === 10) {
                return resolve({ done: true, value: res });
              } else {
              // 不满足条件
                return resolve({ done: false, value: res });
              }
            })
            .catch((err) => {
              reject(err);
            });
        })
          .then((res) => {
            // 满足条件,返回
            if (res.done) {
              return Promise.resolve(res.value);
            } else {
              // 不满足条件,进入递归
              return recursionFetch();
            }
          })
          .catch((err) => {
            return Promise.reject(err);
          });
      }
    
    
      var p1 = recursionFetch();
    
    
      p1.then((res) => {
        console.log("res::", res);
      }).catch((err) => console.log("err:", err));
    
    
    
    2021-12-22
    有用 1
    回复 2
    • spring
      spring
      发表于移动端
      2021-12-22
      我昨晚已经弄出来了,第二次调用getBuilds的时候他又重新new了一个promise,和第一个promise不是同一个,所以第一个一直在pendding中,谢谢
      2021-12-22
      回复
    • N.
      N.
      2023-05-16回复spring
      请问博主时如何解决的,我刚好遇到这个问题了
      2023-05-16
      回复
  • 凡科网
    凡科网
    2022-03-08

    promise没有进行resolve,每次都新建了一个promise

    2022-03-08
    有用
    回复
登录 后发表内容