【问题标题】:Correct chaining of a recursive javascript promise递归 javascript 承诺的正确链接
【发布时间】:2018-02-20 12:33:18
【问题描述】:

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

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

谁能指出我在这里遗漏了什么?

【问题讨论】:

    标签: javascript promise chaining


    【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 2015-05-15
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      相关资源
      最近更新 更多