我已经看了几个关于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 举报,一经查实,本站将立刻删除。