我是Angular的新手并完全承诺,并试图寻找有关的现有帖子,但我无法理解... 我的问题是我有一个列表(schedulesLst),我在其中迭代以获取相关数据,将其添加到新列表中。
$scope.sessionLst=[];
function createSession(scheduleLst){
var session={};
var sessionLst=[];
angular.forEach(scheduleLst, function(sch){
Jobschedule.findById({
id:sch.id
}).$promise.then(function (data) {
session=data;
session.ambassadorid=sch.ambassadorId;
session.status=CoreService.jobStatus.Assigned;
});
sessionLst.push(session);
});
$scope.sessionLst=sessionLst;
}
答案 0 :(得分:1)
var session={};
var sessionLst=[];
angular.forEach(scheduleLst, function(sch){
Jobschedule.findById({
id:sch.id
}).$promise.then(function (data) {
session=data;
session.ambassadorid=sch.ambassadorId;
session.status=CoreService.jobStatus.Assigned;
});
sessionLst.push(session);
});
让我们分析一下上面的代码。
您创建一个空对象:session
。
然后创建一个空数组:sessionLst
。
然后,对于scheduleLst
的每个元素,你都会做一些事情。
在每次迭代中,您都会调用Jobschedule.findById
。后来,当承诺得到解决时,会发生一些事情。但与此同时,您在session
中推送空的sessionLst
对象。
所以你最终会得到一个包含相同空会话对象的列表。
现在有些时候过去了,承诺最终得到了解决。它们每个都重新分配session
变量,但保持数组不变。
你实际上想要的是拥有许多会话对象,一旦从解决的承诺中获取它们,它们应该进入数组:
var sessionLst = [];
angular.forEach(scheduleLst, function(sch){
Jobschedule.findById({
id:sch.id
}).$promise.then(function (data) {
var session = data;
session.ambassadorid = sch.ambassadorId;
session.status = CoreService.jobStatus.Assigned;
sessionLst.push(session);
});
});
这可能是你想要的,但可能不是:sessionLst不会与seceduleLst的顺序相同,如果任何一个promises失败,你将失去会话并赢得&请注意。所以也许$ q.all就是你想要的。但至少,您应该了解当前实施的错误。
答案 1 :(得分:0)
如果.then
返回真正的承诺,则只需$scope.sessionLst=[];
function createSession(scheduleLst) {
var session = {};
var sessionLst = [];
angular.forEach(scheduleLst, function (sch) {
Jobschedule.findById({
id: sch.id
}).then(function (data) {
session = data;
session.ambassadorid = sch.ambassadorId;
session.status = CoreService.jobStatus.Assigned;
$scope.sessionLst.push(session);
});
});
}
以下代码:
IF NOT EXISTS (SELECT * FROM customers_testing WHERE XXXXX)
BEGIN
...[your existing SQL]...
END
有关$ q的更多信息,请阅读文档 - https://docs.angularjs.org/api/ng/service/$q