我看了一些关于承诺中的递归的问题,并对如何正确实现它们感到困惑:
- JavaScript 中的递归 Promise
- AngularJS,承诺具有递归功能
- 递归链接 Promise
- Javascript 递归 Promise
我整理了一个简单的例子(见下文)——这只是一个例子,这样我就可以理解如何使用 Promise 进行递归,而不是我正在工作的代码的表示。
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> }
承诺永远不会兑现。
如果你看看你的代码只要i
小于 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));
最后一部分也有错误。你没有提供一个函数then
所以如果你做了一些实际上会等待的事情,你就会得到"i ended up at: 0"
first.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)