递归 javascript 承诺的正确链接
Correct chaining of a recursive javascript promise
我正在尝试编写一个递归函数,该函数在解析为正确的值之前多次调用自身。
const recursivePromise = (val = 1) => {
return new Promise((resolve, reject) => {
if (val > 5) {
resolve(val)
} else {
return recursivePromise(val + 1)
}
})
}
const doSomethingWithResult = (val) => {
return new Promise((resolve, reject) => {
resolve(val + 2)
})
}
recursivePromise().then(doSomethingWithResult).then(value => console.log(value))
如果我给出初始值“6”,promise 将正确解析并将值传递给链接到它的第二个 promise。但是,如果 recursivePromise 必须调用自身一次或多次,解析值将永远不会到达承诺链的第二个元素。
谁能指出我在这里遗漏了什么?
当您调用 new Promise(callback)
时,回调的 return 值将被忽略。您必须显式调用 resolve
来实现承诺,即
const recursivePromise = (val = 1) => {
return new Promise((resolve, reject) => {
if (val > 5) {
resolve(val)
} else {
recursivePromise(val + 1).then(resolve)
}
})
}
更好的是,在没有 new Promise
的情况下重写它:
const recursivePromise = (val = 1) => {
if (val > 5)
return Promise.resolve(val)
return recursivePromise(val + 1)
}
recursivePromise().then(console.log)
我正在尝试编写一个递归函数,该函数在解析为正确的值之前多次调用自身。
const recursivePromise = (val = 1) => {
return new Promise((resolve, reject) => {
if (val > 5) {
resolve(val)
} else {
return recursivePromise(val + 1)
}
})
}
const doSomethingWithResult = (val) => {
return new Promise((resolve, reject) => {
resolve(val + 2)
})
}
recursivePromise().then(doSomethingWithResult).then(value => console.log(value))
如果我给出初始值“6”,promise 将正确解析并将值传递给链接到它的第二个 promise。但是,如果 recursivePromise 必须调用自身一次或多次,解析值将永远不会到达承诺链的第二个元素。
谁能指出我在这里遗漏了什么?
当您调用 new Promise(callback)
时,回调的 return 值将被忽略。您必须显式调用 resolve
来实现承诺,即
const recursivePromise = (val = 1) => {
return new Promise((resolve, reject) => {
if (val > 5) {
resolve(val)
} else {
recursivePromise(val + 1).then(resolve)
}
})
}
更好的是,在没有 new Promise
的情况下重写它:
const recursivePromise = (val = 1) => {
if (val > 5)
return Promise.resolve(val)
return recursivePromise(val + 1)
}
recursivePromise().then(console.log)