我需要在调用本地函数之前调用三个WS服务,具体取决于是否定义了一些变量,但是在服务获得任何响应之前调用该函数,因为它可能需要一些时间。我甚至尝试过$ timeout,但它不起作用
$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响应之后调用searchPeople方法?
答案 0 :(得分:0)
此处设置超时不正确。一个解决方案可以是:您应该将3个WS嵌套并将函数调用放在最后一个WS回调中。
它还取决于您searchPeople
需要多少参数。如果它只使用来自WS调用的完全3个参数,另一个解决方案是将函数调用放在所有3个WS回调中,并且在函数searchPeople
内,你应该添加一个条件语句来检查我们之前是否有完全3个参数搜索
答案 1 :(得分:0)
使用promises和$q.all()
var promises = [];
promises.push(self.searchByUserCode(self.searchDto.userCode).then(function (data) {
self.userCode= data.find(function (item) {
return item.mstId === self.searchDto.userCode;
});
}));
.then()
返回一个承诺。为3个服务呼叫执行此操作,然后等待其完成
$q.all(promises).then(function(){
self.searchPeople();
})
我发现您可能无法调用所有服务。 $q.all()
将等待您放入数组的承诺。请记住,如果您的服务都没有执行,它也会执行您的呼叫,如果您需要至少一个服务,您可能需要在promises.length > 0
之前添加$q.all()
支票。
这样,如果你只调用你的一个服务,promises数组将有一个元素,一旦完成,将调用你的本地函数。