Javascript 将promise与angular.js一起使用
我在前面使用angular.js 在我的controller.js中,我定义了一个init()方法,该方法将在 我的控制器的初始化 初始化方法定义: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
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
中运行,这反过来会触发作用域上的摘要。