2017-05-24 1 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を設定しているようです。私は何が欠けていますか?私のコードの残りの部分で約束の結果を実際にどのように使用するのですか? foo INGの

+0

あなたはコールバックでそれにアクセスするので、あなたのスコープにそれを割り当てます。 awaitキーワードを使用できる場合を除きます。プロミスは非同期なので、返されず、その戻り値を同期的に使用することを期待します。それは単に次のチェーンに値を返します。 – ste2425

+1

あなたが書いたように、あなたはすでに応答を処理し、記録する場所を知っています。どうしたの? – Bergi

+0

'$ scope.foo'はもう一つの約束ですので、それを待ってください:' $ scope.foo.then(...) ' – Bergi

答えて

4

むしろよりreturn、あなたはコールバックの内部で割り当てを移動することをお勧めします:約束して

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; 
}); 
関連する問題