Javascript 从WS-Server获取响应后调用函数
我需要在调用本地函数之前调用三个WS-services,这取决于是否定义了一些变量,但函数是在服务得到任何响应之前被调用的,因为这可能需要一些时间。我甚至尝试过$timeout,但它不起作用Javascript 从WS-Server获取响应后调用函数,javascript,angularjs,web-services,Javascript,Angularjs,Web Services,我需要在调用本地函数之前调用三个WS-services,这取决于是否定义了一些变量,但函数是在服务得到任何响应之前被调用的,因为这可能需要一些时间。我甚至尝试过$timeout,但它不起作用 $scope.$on('search', function (event, data) { self.searchDto= data; if (self.searchDto.userCode) {
$scope.$on('search', function (event, data) {
self.searchDto= data;
if (self.searchDto.userCode) {
self.searchByUserCode(self.searchDto.userCode).then(function (data) {
self.userCode= data.find(function (item) {
return item.mstId === self.searchDto.userCode;
});
});
}
if (self.searchDto.companyCode) {
self.serachByCompanyCode(self.searchDto.companyCode).then(function (data) {
self.companyCode= data.find(function (item) {
return item.mstId === self.searchDto.companyCode;
});
});
}
if (self.searchDto.jobCode) {
self.searchByJobCode(self.searchDto.jobCode).then(function (data) {
self.jobCode= data.find(function (item) {
return item.mstId === self.searchDto.jobCode;
});
});
}
//I tried with this timeout but it didnt work
$timeout(function () {
self.searchPeople();
}, 1000);
});
有人知道在WS-responses之后如何调用searchPeople方法吗?在这里设置超时不是正确的做法。一种解决方案是:您应该将3个WS嵌套,并将函数调用放在最后一个WS回调中。 这还取决于您的
searchPeople
需要多少参数。如果它只处理来自WS-calls的全部3个参数,另一种解决方案是将函数调用放在所有3个WS-callback中,并且在函数searchPeople
中,您应该添加一个条件语句,在搜索之前检查我们是否有全部3个参数使用和$q.all()
.then()
返回一个承诺。对3个服务呼叫执行此操作,然后等待其完成
$q.all(promises).then(function(){
self.searchPeople();
})
我知道你可能不会给所有的服务打电话$q.all()
将等待您在数组中做出的承诺。请记住,如果没有执行任何服务,它也会执行您的调用。如果您需要至少调用一个服务,您可能需要在$q.all()
之前添加一个promises.length>0
检查
这样,如果您只调用一个服务,Promissions数组将有一个元素,完成后将调用您的本地函数。问题是,它可以全部调用,也可以一个都不调用,当三个参数都没有定义时,searchPeople的调用不会有任何问题,因此我认为这些解决方案无法帮助我,如果我做嵌套,如果第一个参数没有定义,那么另一个即使被定义也不会被调用,第二个是因为正如我前面所说的,它们都不能被发送
$q.all(promises).then(function(){
self.searchPeople();
})