javascript - 使用嵌套的 then 语句传递值

标签 javascript es6-promise

我有一个具有以下格式的函数:

this.callPromiseFunction1(params)
.then(results1 => {
    if (results1.length > 2) {
        this.callPromiseFunction2(params)
        .then(results2 => {
            return results2.stuff;
        }).catch(reject);
    } else {
        return results1.stuff;
    }
})
.then(results3 => {
    this.callPromiseFunction3(someotherparams)
    //do stuff
}).catch(reject)

我的问题是,如果我输入条件并在第一个 then() 语句中调用 promise ,我会遇到计时问题,并且 results3 未定义。如果我输入第一个 then() 语句的 else 语句,则 Results3 被定义。

如何解决此计时问题并允许嵌套 then() 语句和 Promise,而无需完全重写我的 Promise 并强制它们一起工作?有没有办法在继续下一个 then() 之前强制在 then 语句中完成 Promise?

最佳答案

您可以通过返回 promise 来解决该问题。如果您注意到,在执行代码的 if 语句的情况下,您不会返回任何内容。返回 promise 将导致它被插入到 promise 链中的下一个链接之前。另外,您不需要对其进行 catch ,因为最后的最后一个 catch 将处理该问题。提前返回也是个好主意。您的代码可能如下所示:

this.callPromiseFunction1(params)
  .then(results1 => {
    if(results1.length <= 2) return results1.stuff;
    return this.callPromiseFunction2(params)
      .then(results2 => results2.stuff);
  })
  .then(results3 => {
    this.callPromiseFunction3(someotherparams)
    //do stuff
  })
  .catch(reject);

关于javascript - 使用嵌套的 then 语句传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299875/

相关文章:

javascript - 预检响应在 axios 中没有 HTTP ok 状态

javascript - Angular JS过滤器: Why does this remove other LIKE options?

javascript promise catch in then

javascript - 在谷歌折线图中的同一行上组合实线和虚线格式

javascript - 从 iframe 重用 jQuery 对象?

javascript - 不推送数组的表单验证

javascript - 从 $.ajax 调用返回一个 Javascript Promise

javascript - 我的 Promise 链中的 Promise 被拒绝 "reject is not defined"

javascript - 返回 Promise/具有 .then() 方法的 ES6 类?

javascript - 将 Axios Promise 转换为常规 JSON 数组