【发布时间】:2018-03-27 23:28:19
【问题描述】:
我查看了一些关于 Promise 中递归的问题,但对如何正确实现它们感到困惑:
- Recursive Promise in javascript
- AngularJS, promise with recursive function
- Chaining Promises recursively
- Javascript Recursive 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> }
承诺永远不会解决。
【问题讨论】:
-
将
return countToTen();更改为resolve(countToTen());- 控制台仍会显示“待处理”,但是,如果您改为使用var p = countToten......,那么您会看到 p 已解决 -
你遇到的另一个问题是你的
.then是错误的......然后需要一个 function 作为参数,你提供了undefined(结果运行console.log作为参数 - 这就是为什么控制台的输出对你来说看起来不错 -
谢谢你@Jaromanda X,因为你没有写答案所以投了赞成票,否则会接受你的。感谢您的回复。
-
是的,不知道为什么我应该回答时发表评论:p
标签: javascript recursion promise