我有一个具有以下格式的函数:
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语句中强制完成诺言?
答案 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);