我的Angular控制器中有一个函数getGames()
,我的init()
函数和update()
函数都可以调用它。我需要知道init()
或update()
是否调用此函数,因为我对每种情况的处理方式都不同。
我尝试访问arguments.callee.caller.toString()
,但在严格模式下不允许这样做,这是此项目的要求。
如何在严格模式下访问getGames()
的来电者?
我目前的结构如下。显然loadingGames.promise
中的updateSchedule()
不起作用,因为init()
运行时该承诺已经解决。我正在努力重构这一点,以便init()
和updateSchedule()
各自取决于相同函数getGames()
的不同承诺解决方案。
var loadingGames = $q.defer();
var getGames = function() {
playersService.getGames({
playerId: playerId
}).$promise.then(function(data) {
vm.games = data;
loadingGames.resolve();
});
};
var init = function() {
getGames();
}
init();
var updateSchedule = function() {
getGames();
loadingGames.promise.then(function() {
populateOptions(vm.games);
vm.tableParams.reload();
});
};
我的想法是确定caller
末尾的getGames()
,然后根据来电者是谁来解决不同的承诺。
答案 0 :(得分:1)
你的getGames()
- 函数可以返回一个从服务器获取游戏后立即解决的承诺(为了使我的示例代码更短,我将参数遗漏给服务并假设它返回一个许):
var games; //This is vm.games in your case
(function fetchGames() {
games = playersService.getGames()
.then(function(data){
games = data;
return data;
});
})();
function getGames() {
return $q.when(games);
}
function updateSchedule() {
getGames()
.then(function(theGames){
populateOptions(theGames);
tableParams.reload();
});
}
如果x
不是承诺, $q.when(x)
会返回一个立即使用x
解决的承诺。如果x
是承诺,则会直接返回x
。
请注意:您的populateOptions
和tableParam.reload
函数看起来很像手工DOM的东西。角度几乎总是错误的 - 让数据绑定为你完成这项工作。