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) }));
在 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) }));