この 2 つの関数は、私が取り組んでいる音楽プレイリスト プロジェクトのコントローラーの一部です。ユーザーが自分のファイルを選択した後、準備関数が呼び出されて、各ファイルが再生可能かどうかがチェックされます。完了すると、getIDtags が呼び出され、ID3tags データが各ファイルに追加されます。
var preparePlaylist = function (files){
var allPromises = [],
currentSongsListLength = $scope.songsList.length || 0;
$.each(files, function (index){
var file = files[index];
file.index = index + currentSongsListLength;
var promiseA = FileValidator2.check(file);
allPromises.push(promiseA);
promiseA
.then (function (file){
SharedService.addSong(file.index, file);
});
});
$q
.all(allPromises)
.then(function () {
console.log('Check Resolved!');
console.log('SharedService updated.');
getID3tags();
});
};
var getID3tags = function (){
var ID3tagsPromises = [];
$.each($scope.songsList, function(index){
var promiseB = ID3tags.getTags($scope.songsList[index]);
ID3tagsPromises.push(promiseB);
promiseB
.then( function (file){
SharedService.addSong(file.index, file);
});
});
$q
.all(ID3tagsPromises)
.then(function () {
console.log('ID3tags Resolved!');
console.log('SharedService updated.');
});
};
2 つの関数/promise(promiseA、promiseB) をチェーンされた promise で 1 つの関数に結合し、すべてが完了したときに $q.all を取得する方法。