Angularjs 承诺执行服务

Angularjs execute service in promise

在 angularjs 中,我尝试按顺序依次执行服务。下面是我的代码,

$q.when()  
    .then(function () { 
            console.log("Start"); 
            return getMyDetailsService.MyDetails();                     
        })  
    .then(function (MyDetails) {
            console.log("Step 2"); 
            var AllTabs = [];               
            angular.forEach(MyDetails, function(value, key){                
                AllTabs.push({ "TabName":value.checkfile });                
            });             
        return AllTabs;         
        })  
    .then(function (AllTabs) {
            console.log("Step 3"); 
                angular.forEach(AllTabs, function(value, key){
                    console.log(value.TabName);
                    return getMongodbDataService.MongoDatadb(value.TabName)
                    //console.log(MongoDatadb)
                })      
        })
    .then(function (MongoDatadb) { console.log("Step 4"); console.log(MongoDatadb); })
    .then(function (AllTabs) { console.log("Finish"); }) 

问题是,我在控制台中 "Step 4" 之后得到 "undefined"。服务 "getMongodbDataService" 似乎没有正确接受输入。如果我评论 forEach 循环并使用硬代码输入执行,它就可以工作。

//angular.forEach(AllTabs, function(value, key){
      //console.log(value.TabName);
      return getMongodbDataService.MongoDatadb('Tab01')
      //console.log(MongoDatadb)
//})

请指出我在处理 promises 时犯的错误。还请告诉我如果服务 returns 多个 "MongoDatadb" 响应,下一个功能(第 4 步)会处理所有请求还是只接受最后一个。根据我的需要,我必须一一处理所有的回复。

非常感谢

因为你的return命令在'foreach'方法的范围内,不在你的承诺处理范围内。

angular.forEach 不会 return "Step 3" 上的任何值。 您应该使用 map() to return an array of promises and $q.all() 将它们全部组合成一个承诺,当所有输入承诺都得到解决时,该承诺将得到解决:

return $q.all(AllTabs.map(function(tab){ return getMongodbDataService.MongoDatadb(tab.TabName) }));