async/await 中的递归未在主函数中解析
Recursion in async/await not resolve in main function
我正在尝试在 asynс/await 函数中使用递归。问题是我无法在 main 函数中获得最终的承诺,其中我最初调用了递归方法
async function delay(ms) {
return await new Promise(resolve => setTimeout(resolve, ms))
}
async function recursion(i) {
return new Promise(async (resolve, reject) => {
if (i == 0) {
console.log(`i == 0`)
resolve(i)
} else {
console.log(`i = ${i}. Wait 1 second...`)
i--
await delay(2000)
await recursion(i)
}
})
}
async function main() {
let i = await recursion(3)
console.log(`END OF RECURSION`) //This code never use!
console.log(`i => ${i}`)
}
main()
console.log:
i = 3. Wait 1 second...
i = 2. Wait 1 second...
i = 1. Wait 1 second...
i == 0
这是 promise 构造反模式。已经存在链式承诺,无需创建新承诺。从 Promise
回调返回的承诺将被忽略,这会破坏承诺链。此外,存在不一致,值并不总是从 recursion
.
返回
应该是:
async function recursion(i) {
if (i == 0) {
console.log(`i == 0`)
return i
} else {
console.log(`i = ${i}. Wait 1 second...`)
i--
await delay(2000)
return recursion(i)
}
}
我正在尝试在 asynс/await 函数中使用递归。问题是我无法在 main 函数中获得最终的承诺,其中我最初调用了递归方法
async function delay(ms) {
return await new Promise(resolve => setTimeout(resolve, ms))
}
async function recursion(i) {
return new Promise(async (resolve, reject) => {
if (i == 0) {
console.log(`i == 0`)
resolve(i)
} else {
console.log(`i = ${i}. Wait 1 second...`)
i--
await delay(2000)
await recursion(i)
}
})
}
async function main() {
let i = await recursion(3)
console.log(`END OF RECURSION`) //This code never use!
console.log(`i => ${i}`)
}
main()
console.log:
i = 3. Wait 1 second...
i = 2. Wait 1 second...
i = 1. Wait 1 second...
i == 0
这是 promise 构造反模式。已经存在链式承诺,无需创建新承诺。从 Promise
回调返回的承诺将被忽略,这会破坏承诺链。此外,存在不一致,值并不总是从 recursion
.
应该是:
async function recursion(i) {
if (i == 0) {
console.log(`i == 0`)
return i
} else {
console.log(`i = ${i}. Wait 1 second...`)
i--
await delay(2000)
return recursion(i)
}
}