2016-08-08 13 views
2

私はES6とbabelを使ってAngular full-stackで作業しています。私のコントローラでAngularJsで実行を約束します。

、私が持っている:

$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()});と思われますが、クリーンな解決策ではないようです。

答えて

6

関数呼び出しの代わりに.then(aFunction)のような関数参照を渡す必要があります。現在、aFunction()はすぐにその機能を呼び出しています。

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

aFunctionが直ちに実行され、その結果が.then()に渡されます。

それでなければならない:.then(aFunction)

これは、それ自体を実行する.thenへの参照を渡します。