joe*_*elc 3 javascript recursion promise
我已经看了几个关于promises递归的问题,并对如何正确实现它们感到困惑:
我把一个简单的例子(见下文)放在一起 - 这只是一个例子,所以我可以理解如何使用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));
Run Code Online (Sandbox Code Playgroud)
和控制台上的输出:
> 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> }
Run Code Online (Sandbox Code Playgroud)
承诺永远不会解决.
Syl*_*ter 11
如果您查看代码的时间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));Run Code Online (Sandbox Code Playgroud)
最后一部分也有错误.你没有提供一个函数,then如果你已经做了一些实际上会等待的东西你会得到第"i ended up at: 0"一个.
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |