2017-05-24 7 views
2

Ich bin sicher, dass ich etwas offensichtlich und grundlegende über Synchronität fehlt bin, aber ich kann nicht meinen Kopf um, wie das funktionieren soll ...Wie kann ich auf den Wert eines zurückgegebenen Versprechens zugreifen?

$scope.foo=[]; 

getFoo(url) { 
    $scope.foo=$http.get(url).then(function (response) { 
    var foo = []; 
    //process response to get foo array. Console.log returns as expected here. 
    return foo; 
    }); 
} 

Dies scheint nur $scope.foo das Versprechen Objekt zu setzen . Was vermisse ich? Wie verwende ich das Ergebnis des Versprechens im Rest meines Codes?

+0

Sie greifen darauf in Ihrem Callback zu, also weisen Sie es Ihrem Scope dort zu. Es sei denn, Sie können das await-Schlüsselwort verwenden. Versprechen sind asynchron, sodass Sie nicht zurückgeben und erwarten, den zurückgegebenen Wert synchron zu verwenden. Das gibt einfach einen Wert zum nächsten verketteten. – ste2425

+1

Wie Sie geschrieben haben, wissen Sie bereits, wo die Antwort verarbeitet und protokolliert werden soll. Was ist das Problem? – Bergi

+0

'$ scope.foo' ist ein weiteres Versprechen, also warte:' $ scope.foo.then (...) ' – Bergi

Antwort

4

Anstatt return ing foo, möchten Sie die Zuordnung innerhalb der Callback bewegen:

getFoo(url) { 
    $http.get(url).then(function (response) { 
    var foo = []; 
    // process response to get foo array... 
    $scope.foo = foo; 
    }); 
} 

mit dem Versprechen, den Wert return durch einen .then() Rückruf ed wird nur ein weiterer .then() Rückruf noch verfügbar sein wenn sie miteinander verkettet sind:

Verwandte Themen