在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一个)将处理所有请求或将只采取最后一个。根据我的需要,我必须逐个处理所有的响应。
非常感谢
答案 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'方法不在你的承诺范围内。