考虑以下代码:
async function callPromise ()
{
let num = await promiseEvenOdd()
console.log(num, "is odd")
}
function promiseEvenOdd()
{
return new Promise((resolve, reject) => {
let num = Math.floor(Math.random() * 2) + 1
console.log("num", num)
if (num % 2)
{
console.log("odd")
resolve(num)
}
else
{
console.log("even")
return promiseEvenOdd()
}
})
}
callPromise ()
如果数字为偶数,我们将其称为新的诺言;当数字为奇数时,我们将兑现诺言;但是,在某些偶数之后,并且在解决之后,永远不会返回等待,
有什么解决办法的想法吗?
谢谢
大个子
答案 0 :(得分:1)
问题在于,创建承诺时,您始终必须致电resolve
或reject
。在偶数情况下,您返回promiseEvenOdd
的结果,但是您从未解决原始的诺言,这就是它永远挂起的原因。
要解决此问题,您应该仅使用递归调用的结果来解决原始的promise,而不要返回它。例如,更改行
return promiseEvenOdd()
收件人:
resolve(promiseEvenOdd())
这样,第一个承诺将与下一个承诺的结果一起解决。
示例:
async function callPromise ()
{
let num = await promiseEvenOdd()
console.log(num, "is odd")
}
function promiseEvenOdd()
{
return new Promise((resolve, reject) => {
let num = Math.floor(Math.random() * 2) + 1
console.log("num", num)
if (num % 2)
{
console.log("odd")
resolve(num)
}
else
{
console.log("even")
resolve(promiseEvenOdd())
}
})
}
callPromise ()