正确链接递归javascript承诺

时间:2018-02-20 12:33:18

标签: javascript promise chaining

我正在尝试编写一个递归函数,在使用正确的值进行解析之前,它会多次调用自身。

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 必须自己调用一次或多次,则解析值将永远不会到达promise链的第二个元素。

有人能指出我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

当您调用new Promise(callback)时,将忽略回调的返回值。你必须明确地致电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)