Angularjs在promise中执行服务

时间:2017-09-01 13:30:38

标签: angularjs angular-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"); }) 

问题是,我得到"未定义"在"步骤4"在控制台。似乎服务" getMongodbDataService"没有正确地输入。如果我评论每个循环并执行硬编码输入,它的工作原理。

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

请建议,我在承诺处理中犯了错误。请告诉我服务是否会返回多个" MongoDatadb"响应,下一个功能(步骤4一个)将处理所有请求或将只采取最后一个。根据我的需要,我必须逐个处理所有的响应。

非常感谢

2 个答案:

答案 0 :(得分:1)

angular.forEach不会在“第3步”中返回任何值。 您应该使用map()返回一组promises和$q.all(),将它们全部合并为一个promise,当所有输入的promise都被解析时,它将被解析:

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

答案 1 :(得分:0)

因为你返回命令属于' foreach'方法不在你的承诺范围内。