Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 将promise与angular.js一起使用_Javascript_Angularjs_Promise - Fatal编程技术网

Javascript 将promise与angular.js一起使用

Javascript 将promise与angular.js一起使用,javascript,angularjs,promise,Javascript,Angularjs,Promise,我在前面使用angular.js 在我的controller.js中,我定义了一个init()方法,该方法将在 我的控制器的初始化 初始化方法定义: var init = function () { $scope.callTeamsService(); if ($scope.teams.length == 0){ .... }else{ ... } ..... }; $scope.callTeamsService = function(){ NavService.getTea

我在前面使用angular.js

在我的controller.js中,我定义了一个init()方法,该方法将在

我的控制器的初始化

初始化方法定义:

var init = function () {
$scope.callTeamsService();
if ($scope.teams.length == 0){
....
}else{
...
}
.....

};
$scope.callTeamsService = function(){
        NavService.getTeams(function (response) {
                $timeout(function () {
                    $scope.teams = response;                        
                    }
                }, 200);
            });
    };
$scope.callTeamsService中,我填写了$scope.teams变量

$scope.callTeamsService方法定义:

var init = function () {
$scope.callTeamsService();
if ($scope.teams.length == 0){
....
}else{
...
}
.....

};
$scope.callTeamsService = function(){
        NavService.getTeams(function (response) {
                $timeout(function () {
                    $scope.teams = response;                        
                    }
                }, 200);
            });
    };
在my service.js中,我定义了一个getTeams方法,如下所示:

service.getEquipes = function (callback) {
$http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams')
                    .success(function (response) {
                        callback(response);
                    });
            };
我的问题是当达到$scope.teams.length==0条件时

my service.js中的service.getEquipes方法尚未调用

在达到$scope.teams.length==0条件之前,如何修改此代码以完成$scope.callTeamsService方法的执行

  service/factory

   service.getEquipes = function () {
        return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');

        };


 // controller 
    var promise = NavService.getTeams.then (
           function(data) {
             //assign to $scope or do logic
           },
           function(err){
               console.log(err)
           } 
      )
在达到
$scope.teams.length==0
条件之前,如何修改此代码以完成
$scope.callTeamsService
方法的执行

  service/factory

   service.getEquipes = function () {
        return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');

        };


 // controller 
    var promise = NavService.getTeams.then (
           function(data) {
             //assign to $scope or do logic
           },
           function(err){
               console.log(err)
           } 
      )
这是错误的做法-您需要等待执行
$scope.teams.length==0
条件,直到
$scope.callTeamsService
方法完成

经典的方法是给
$scope.callTeamsService
方法一个回调参数,并在超时时调用该参数,而不是
$scope.teams=response。然后,您可以将您的条件放入您传递的回调中的
init
函数中

但是,您似乎希望使用承诺。为此,所有函数(都是异步的)都应该
返回一个承诺:

service.getEquipes = function (callback) {
    return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');
}
(这很简单,
$http
已经返回了承诺)

(也可以这样做-通过调用
然后
并从回调返回它,您可以将它们链接起来,并获得两者的新承诺)

在达到
$scope.teams.length==0
条件之前,如何修改此代码以完成
$scope.callTeamsService
方法的执行

  service/factory

   service.getEquipes = function () {
        return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');

        };


 // controller 
    var promise = NavService.getTeams.then (
           function(data) {
             //assign to $scope or do logic
           },
           function(err){
               console.log(err)
           } 
      )
这是错误的做法-您需要等待执行
$scope.teams.length==0
条件,直到
$scope.callTeamsService
方法完成

经典的方法是给
$scope.callTeamsService
方法一个回调参数,并在超时时调用该参数,而不是
$scope.teams=response。然后,您可以将您的条件放入您传递的回调中的
init
函数中

但是,您似乎希望使用承诺。为此,所有函数(都是异步的)都应该
返回一个承诺:

service.getEquipes = function (callback) {
    return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');
}
(这很简单,
$http
已经返回了承诺)

(也可以这样做-通过调用
然后
并从回调返回它,您可以将它们链接起来,并获得两者的新承诺)


缺少
此处:
”/teams)
。键入?
。然后
。然后
。然后
@gr3g哪里可以添加。然后?.success->。然后。我想知道你的Service.js是什么样子的
var homeService=angular.module('Home',['ngTable']);homeService.factory('NavService'、['$http'、'$cookieStore'、'$rootScope'、'$timeout',function($http、$cookieStore、$rootScope、$timeout){var service{};…..service.getTeams=function(回调){$http.get(urlBase+'users/'+$rootScope.globals.currentUser.loggedUser.idUser+'/teams')。成功(函数(响应){callback(response);};};返回服务;}]);
缺少
'
此处:
'/teams)
。键入?
。然后
。然后
。然后
@gr3g哪里可以添加。然后?.success->。然后。我想知道你的Service.js是什么样子的
var homeService=angular.module('Home',['ngTable']);homeService.factory('NavService'、['$http'、'$cookieStore'、'$rootScope'、'$timeout',function($http、$cookieStore、$rootScope、$timeout){var service{};…..service.getTeams=function(回调){$http.get(urlBase+'users/'+$rootScope.globals.currentUser.loggedUser.idUser+'/teams')。成功(函数(响应){callback(响应);});};返回服务;}])
$timeout
很可能在那里,因为OP没有真正理解摘要,我怀疑你真的不需要它。它可以是return teams`这意味着它可以是
$scope.callteams服务=NavService.getTeams
。嗯,那里的200看起来他出于某种原因想要超时……坦白地说,我不知道关于
$scope
处理承诺的内容有很多。
然后
处理程序在
evalAsync
中运行,这反过来又会触发scope上的摘要。
$timeout
可能存在,因为OP并不真正理解摘要,我怀疑您在那里并不真正需要它。它可以是return teams`这意味着它可以be
$scope.callTeamsService=NavService.getTeams
.Hm,那里的200人似乎出于某种原因想要超时……诚然,我对
$scope
如何处理承诺知之甚少。
然后
处理程序在
evalAsync
中运行,这反过来会触发作用域上的摘要。