angularJS中的连锁承诺

angularJS中的连锁承诺,angularjs,promise,q,chain,Angularjs,Promise,Q,Chain,这两个功能是我正在处理的音乐播放列表项目控制器的一部分。用户选择文件后,将调用prepare函数检查每个文件是否可以播放。完成后,将调用getIDtags将ID3tags数据添加到每个文件中 var preparePlaylist = function (files){ var allPromises = [], currentSongsListLength = $scope.songsList.length || 0;

这两个功能是我正在处理的音乐播放列表项目控制器的一部分。用户选择文件后,将调用prepare函数检查每个文件是否可以播放。完成后,将调用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个函数/承诺(promiseA,promiseB)组合成一个具有链式承诺的函数,并在完成所有操作后仍能获得$q.all.Thanxs.

因此,文件中的每个函数都要一个接一个地调用(针对此问题域),然后尝试此方法

如果functionA返回一个承诺,functionB返回一个承诺,functionA的承诺可以用functionB的承诺来解决

function preparePlaylist(){
    var finished = $q.defer();
    // rest of function body
    $q.all(allPromises).then(function(){
        //Do whatever you need
        finished.resolve(getID3tags());
    });
    return finished.promise;

function getID3tags(){
    var finished = $q.defer();
    //rest of function body
    $q.all(ID3tagsPromises).then(function(){
        //Do whatever you need
        finished.resolve('Done both preparePlaylist and getID3tags');
    });
    return finished.promise;

preparePlaylist.then(function(response){
    console.log(response);
});
这可能需要稍微调整一下,但它应该可以工作。但是我还没有测试过。希望有帮助


供参考的文档:.$q

因此,文件中的每个函数都将被一个接一个地调用(对于这个问题域),然后尝试此方法

如果functionA返回一个承诺,functionB返回一个承诺,functionA的承诺可以用functionB的承诺来解决

function preparePlaylist(){
    var finished = $q.defer();
    // rest of function body
    $q.all(allPromises).then(function(){
        //Do whatever you need
        finished.resolve(getID3tags());
    });
    return finished.promise;

function getID3tags(){
    var finished = $q.defer();
    //rest of function body
    $q.all(ID3tagsPromises).then(function(){
        //Do whatever you need
        finished.resolve('Done both preparePlaylist and getID3tags');
    });
    return finished.promise;

preparePlaylist.then(function(response){
    console.log(response);
});
这可能需要稍微调整一下,但它应该可以工作。但是我还没有测试过。希望有帮助


参考文件:.$q

对不起,问题很不清楚,很不清楚,但问题很不清楚。嘿,Ryan thanxs,但我想我没有正确地解释我自己。2函数具有完全相同的结构(语法方面)。我想将其转换为具有链式承诺的1 func。首先,它检查文件,得到解析,然后得到ID标记,并得到解析,每个只需一美元。希望我把自己说得更清楚一点。嘿,瑞安·坦克斯,但我想我没有正确地解释我自己。2函数具有完全相同的结构(语法方面)。我想将其转换为具有链式承诺的1 func。首先,它检查文件,得到解析,然后得到ID标记,并得到解析,每个只需一美元。希望我能让自己更清楚一点。