2017-05-24 26 views
2

我敢肯定,我失去了一些東西明顯,基本在同步性,但我不能讓我的身邊,這是如何工作的頭......如何訪問退貨承諾的價值?

$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; 
    }); 
} 

這似乎只是設定$scope.foo的承諾對象。我錯過了什麼?我如何在餘下的代碼中實際使用承諾的結果?

+0

您可以在您的回調函數中訪問它,因此將其分配給您的範圍。除非你可以使用await關鍵字。承諾是異步的,所以你不會返回並期望以同步方式使用返回的值。那只是給下一個鏈接返回一個值。 – ste2425

+1

正如你所寫,你已經知道在哪裏處理和記錄響應。有什麼問題? – Bergi

+0

'$ scope.foo'是另一個承諾,所以等待它:'$ scope.foo.then(...)' – Bergi

回答

4

不是return荷蘭國際集團foo,你要移動的回調內部的分配:

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

有了承諾,由.then()回調編值return將只提供給另一個.then()回調當他們鏈接在一起時:

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