2016-07-09 15 views
-1

Ich versuche, die folgende FunktionJavascript-Funktion kehrt nicht den erwarteten Wert

var getjson = function(){ 
    $.get('/api/todos/testing', function(results){ 
     return results; 
    }); 
} 

Die Ergebnisse laufen sollte wie folgt aussehen:

[{_id: "57803baf0a76d5c924b18ca2", username: "testing", toDoTask: "Buy Water", isDone: false, __v: 0},{_id: "57803baf0a76d5c924b18ca3", username: "testing", toDoTask: "Buy Milk", isDone: false, __v: 0}] 

Wenn ich versuche, um die Funktion aufzurufen anhängen Die Liste zu meinem Winkelregler

angular.module('firstapp').controller('todos', function(){ 
    this.list= getjson(); 
}); 

Die Liste speichert die von der Funktion zurückgegebenen Werte nicht.

Ich bin mir sicher, dass das Problem damit zusammenhängt, wie ich versuche, die Ergebnisse zurückzugeben, aber ich konnte nicht finden, was der richtige Weg ist.

Antwort

2

$.get ist asynchron, also, wenn Sie getjson() ausgeführt haben, wird der Code immer noch die GET Operation ausführen, aber es wird sofort zurückkehren.

Da Sie keine return Anweisung für sie definiert haben, wird standardmäßig Javascript geben Sie undefined, was ist this.list wird als gesetzt.

Dokumentation für $.get: https://api.jquery.com/jquery.get/

Ihr Problem zu beheben ist der einfachste Weg wäre, getjson() eine Callback-Funktion zu machen akzeptieren.

Beispiel:

var getjson = function(done){ 
    $.get('/api/todos/testing', function(results){ 
     return done(results); 
    }); 
} 

Dann werden Sie getjson() mit einer Funktion aufrufen, die die list setzt.

angular.module('firstapp').controller('todos', function(){ 
    getjson(function(results) { this.list = results; })); 
}); 
+0

Gibt es nicht ein Versprechen? Wenn dies der Fall ist, könnte diese Antwort hilfreicher sein, wenn gezeigt wird, wie eine Auflösungsfunktion an das Versprechen übergeben wird. – danh

Verwandte Themen