角度の$q
とJavascriptのpromise
apiを正しく使用することができません。それではまた、私はJavascriptでかなり新しく、構文エラーを起こしている可能性があります。
This質問は似ているようだが、それは正確なコピーではないようです...
私のサービスは、この(私のコントローラによって呼び出される)のような方法があります。
self.getResources = function() {
let promises = [];
for (let resourceName in $rootScope.resourceNameList) {
promises.push($http({
url : '/' + resourceName,
method : 'GET'
}).then(function (res) {
return { resourceName : res.data};
}));
}
return promises;
};
そして、私をコントローラは、角度の$q.all()
に戻す約束のリストを渡します。
let promises = resourceService.getResources();
$q.all(promises).then(function (resultsArray) {
// resultsArray should be an array of elements like:
// [ {cars : [...]}, {coffeePots : [...]}, {motorBoats : [...]} ]
// with size = resourceNameList.length(), correct?
// this log is never called.
console.log(resultsArray);
$scope.resources = resultsArray;
});
最後に、私のHTMLに、私はリソースを反復処理して表示しよう:
.
.
.
<!-- 'cars' is and example, but I am trying to retrieve this data in the same way -->
<tr ng-repeat="item in resources[cars]">
<td>{{item.property1}}</td>
<td>{{item.property2}}</td>
</tr>
表には結果が表示されません。
コンソールからHTTPリクエストが成功し、データが返ってきていることがわかります。したがって、私はpromise
または$q
apisで間違いを犯しているはずです。
提案がありますか?
ありがとうございました。あなたはこの
self.getResources = function($q,$http) {
let promises = [];
for (let resourceName in $rootScope.resourceNameList) {
promises.push($http({
url : '/' + resourceName,
method : 'GET'
}).then(function (res) {
return { resourceName : res.data};
}));
}
return promises;
}のようなディレクティブで$ qと$ HTTPを注入する必要が
あなたはどんな漁獲もしていないので、上流のエラーを飲み込むこともできます。 –
サービスメソッドでは 'resourceName 'プロパティを持つオブジェクトを返しますが、コントローラではそれを考慮していません。 'resourcesArray'をコンソールに記録し、構造体を検査します。あなたはそれをすべて1つの配列にするためにもっと操作する必要があります – charlietfl
は$ q.allを解決しますか?例えばそのブロックにconsole.logを入れて、それが呼び出されているのを見て、resultsArrayは次のように見えますか? – dewd