从WS获得响应后调用函数

时间:2018-06-01 15:22:39

标签: javascript angularjs web-services

我需要在调用本地函数之前调用三个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方法?

2 个答案:

答案 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数组将有一个元素,一旦完成,将调用你的本地函数。