皆さん..
プログラムの開始時に、約 8 つの異なるリソースからデータを取得する必要があります。
これらのリソースは互いに独立しており、並列に呼び出すことができます。(つまり、別のリソースから何を取得するかを決定するために、あるリソースからのデータは必要ありません)
ただし、すべてのリソースは相互に作用するため、すべてのリソースからすべてのデータを手元に持っていることを確認する必要があります。
したがって、コントローラーの先頭で、次のコードで init 関数を呼び出します。
*編集より具体的には、私の正確なコードは次のとおりです
$scope.init = function () {
return $q.all([
Factory1.getCarData.query(), // returns a resource object like [$resolved: false, $then: function]
Factory2.getOtherData.query(), // returns a resource object like [$resolved: false, $then: function]
Factory3.getSomeOtherData.query() // returns a resource object like [$resolved: false, $then: function]
....,
resource8.query()]).then(result) {
$scope.data1 = result[1];
$scope.data2 = result1[2];...
$scope.data8 = result[3];
console.log($scope.data1); //prints as [$resolved: false, $then: function]
console.log($scope.data1[1]);
prints as undefined
doSomethingonData1($scope.data2);
doSomethingonData2($scope.data3, $scope.data4);..etc etc
}
}
ここで、Factory1 は次のように定義されています。
angular.module('app').factory('Factory1', function (Factory1Resource) {
var carPromise = Factory1Resource.query();
return {
getCarData: function(){ return carPromise;}
}
Factory1Resource は次のように定義されます。
.factory('Factory1Resource', ['$resource', function($resource) {
return $resource(myURL, {}, {} );
}])
ファクトリを使用することの要点は、8 つのリソースすべてのデータ操作がコントローラの外部の個々のユニットで確実に行われるようにすることです。
私のポイントは..「.then」関数は、すべてのリソースが解決された後にのみ呼び出されると考えていました。これは、変数 $scope.data1、$scope.data2 などに実際のデータが必要であり、リソース オブジェクトではないことを意味します。
これは、console.log($scope.data1) を実行する場合とは異なります.. [$resolved: false, $then: function] として出力されます。
これは私のプログラムの流れを壊します。
今、私は約束とリソースについて多くのことを読んだと思っていました。
私が望むのは、私の変数 ($scope.data1、$scope.data2 など) すべてに実際のデータが含まれていることです。
ヒントはありますか?または、コードをどのようにレイアウトするべきかについて、より良いアイデアを自由に提案してください。