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