微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 承诺递归

我已经看了几个关于promises递归的问题,并对如何正确实现它们感到困惑:

> Recursive Promise in javascript
> AngularJS, promise with recursive function
> Chaining Promises recursively
> Javascript Recursive Promise

我把一个简单的例子(见下文)放在一起 – 这只是一个例子,所以我可以理解如何使用promises工作进行递归,而不是代表我正在工作的代码.

Net-net,我想要解决的承诺,但根据节点上的输出,它无法解决.有关如何解决问题的任何见解?

var i = 0;

var countToTen = function() { 
    return new Promise(function(resolve, reject) {
        if (i < 10) {
            i++;
            console.log("i is Now: " + i);
            return countToTen();
        }
        else {
            resolve(i);
        }
    });
}

countToTen().then(console.log("i ended up at: " + i));

和控制台上的输出

> countToTen().then(console.log("i ended up at: " + i));
i is Now: 1
i is Now: 2
i is Now: 3
i is Now: 4
i is Now: 5
i is Now: 6
i is Now: 7
i is Now: 8
i is Now: 9
i is Now: 10
i ended up at: 10
Promise { <pending> }

承诺永远不会解决.

解决方法:

如果你查看你的代码,只要我小于10你就会递归并且永远不会解决这个承诺.你最终解决一个承诺.但这不是初始来电者的承诺.

您需要使用递归返回的promise来解决.如果您使用承诺解决系统的工作原理,它将在解析值之前仍然无法解决

let i = 0;
const countToTen = () => new Promise((resolve, reject) => {
    if (i < 10) {
      i++;
      console.log("i is Now: " + i);
      resolve(countToTen());
    } else {
      resolve(i);
    }
  });

countToTen().then(() => console.log("i ended up at: " + i));

最后一部分也有错误.你没有提供一个函数,所以如果你做了一些实际上会等待的东西,你会得到“我最终得到:0”.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐