订单承诺在AngularJs中执行

时间:2016-08-08 14:59:26

标签: javascript angularjs promise ecmascript-6 es6-promise

我正在使用ES6和babel处理Angular全栈。

在我的控制器中,我有:

$onInit() { 
    this.$http.get('/api/example')
        .then(() => {console.log("task1")})
        .then(() => {console.log("task2")})
}

控制台结果是我想要的:

 task1  
 task2

但是当我尝试重构我的代码时:

$onInit() { 
    this.$http.get('/api/example')
        .then(() => {console.log("task1")})
        .then(aFunction())
}  

aFunction() {
    console.log("task2")
}

控制台结果是:

 task2  
 task1

为什么会这样?

Nb:.then(() => {this.aFunction()});似乎有效,但似乎不是一个干净的解决方案。

2 个答案:

答案 0 :(得分:6)

您应该传递函数引用,如.then(aFunction)而不是函数调用。目前你正在做aFunction()正在立即调用该函数。

$onInit() { 
    this.$http.get('/api/example')
        .then(() => {console.log("task1")})
        .then(aFunction)
}

答案 1 :(得分:4)

aFunction立即执行,其结果传递到.then()

应该是:.then(aFunction)

这将传递对它将自行执行的.then的引用。