Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从WS-Server获取响应后调用函数_Javascript_Angularjs_Web Services - Fatal编程技术网

Javascript 从WS-Server获取响应后调用函数

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) {

我需要在调用本地函数之前调用三个WS-services,这取决于是否定义了一些变量,但函数是在服务得到任何响应之前被调用的,因为这可能需要一些时间。我甚至尝试过$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-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();
})