使用嵌套的then语句传递值

时间:2018-09-12 16:36:41

标签: 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,则会出现计时问题,并且result3是未定义的。如果我输入第一个else语句的then()语句,就会定义Results3。

如何解决此计时问题,并允许嵌套的then()语句和诺言,而不必完全重写我的诺言并强迫他们一起工作?有没有一种方法可以在继续下一个then()之前在then语句中强制完成诺言?

1 个答案:

答案 0 :(得分:1)

您可以通过返回承诺来解决该问题。如果您注意到执行代码的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);