2016-08-08 69 views
2

Ich arbeite an Angular Full-Stack mit ES6 und Babel.Auftrag verspricht Ausführung in AngularJs

In meinem Controller, ich habe:

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

Die Konsole Ergebnis ist das, was ich will:

task1 
task2 

Aber wenn ich versuche, meinen Code zu Refactoring:

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

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

Die Konsolenergebnis ist:

task2 
task1 

Warum passiert das?

Nb: .then(() => {this.aFunction()}); scheint zu arbeiten, aber nicht scheint eine saubere Lösung zu sein.

Antwort

6

Sie sollten Funktionsreferenz wie .then(aFunction) anstelle von Funktionsaufruf übergeben. Derzeit tun Sie gerade aFunction() ruft diese Funktion sofort auf.

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

aFunction wird sofort ausgeführt und das Ergebnis in die übergeben.

es sein sollte: .then(aFunction)

Dies wird einen Verweis auf die .then geben, die sie selbst ausführt.