Angularjs承诺执行服务

Angularjs承诺执行服务,angularjs,angular-promise,Angularjs,Angular Promise,在angularjs中,我试图以顺序的方式一个接一个地执行服务。下面是我的代码 $q.when() .then(function () { console.log("Start"); return getMyDetailsService.MyDetails(); }) .then(function (MyDetails) { console

在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”似乎没有正确地获取输入。如果我对forEach循环进行注释并使用硬代码输入执行,它就会工作

//angular.forEach(AllTabs, function(value, key){
      //console.log(value.TabName);
      return getMongodbDataService.MongoDatadb('Tab01')
      //console.log(MongoDatadb)
//})
请指出,我在处理承诺时犯了什么错误。还请告诉我,如果服务返回多个“MongoDataB”响应,下一个函数(步骤4-1)是处理所有请求还是只处理最后一个请求。根据我的需要,我必须逐一处理所有的回复


非常感谢

因为您返回的命令在“foreach”方法的范围内,而不在承诺处理的范围内。

不会在“步骤3”上返回任何值。 您应该使用返回一个承诺数组,并将它们组合成一个承诺,当所有输入承诺都得到解决时,该承诺将得到解决:

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

也许你可以返回一个数组。我可能会检查他的帖子第3步什么也不返回。只需为每个项调用一次迭代器函数,其中的
return
实际上对返回承诺链的结果没有任何作用而不是
forEach
@sand您能解决您的问题吗?否@Stanislav,我尝试了“返回AllTabs.map(函数(tab){return getMongodbDataService.mongodatab(tab.TabName)};”,但控制台中给出了以下内容。(2)[Promise,Promise]0:Promise$$state:status:1值:数组(1)0:{信息时间:“98.441382”}长度:1\uuuuuu proto\uuuuu:Array(0)\uuuuu proto\uuuuu:Object\uuuuuu proto\uuuuuuuuu:Object 1:Promise{$$state:{…}