如何在严格模式下找到函数调用者
How to find function caller while in strict mode
我的 Angular 控制器中有一个函数 getGames()
,我的 init()
函数和 update()
函数都可以调用它。我需要知道是 init()
还是 update()
调用了这个函数,因为我对每种情况的处理方式不同。
我尝试访问 arguments.callee.caller.toString()
,但在严格模式下不允许这样做,这是该项目的要求。
如何在严格模式下访问 getGames()
的调用者?
我目前的结构如下。显然 updateSchedule()
中的 loadingGames.promise
不起作用,因为当 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();
});
};
我的想法是确定 getGames()
末尾的 caller
,然后根据调用者是谁解决不同的承诺。
您的 getGames()
-函数可以 return 一个一旦从服务器获取游戏就解决的承诺(为了使我的示例代码更短,我省略了服务的参数并假设它 return 是一个承诺):
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();
});
}
$q.when(x)
return 如果 x
不是承诺,则立即用 x
解决的承诺。如果 x
是一个承诺,它 return 直接 x
。
请注意:您的 populateOptions
和 tableParam.reload
函数看起来很像您手动执行的 DOM-东西。这在 angular 中几乎总是错误的 - 让数据绑定为您完成这项工作。
我的 Angular 控制器中有一个函数 getGames()
,我的 init()
函数和 update()
函数都可以调用它。我需要知道是 init()
还是 update()
调用了这个函数,因为我对每种情况的处理方式不同。
我尝试访问 arguments.callee.caller.toString()
,但在严格模式下不允许这样做,这是该项目的要求。
如何在严格模式下访问 getGames()
的调用者?
我目前的结构如下。显然 updateSchedule()
中的 loadingGames.promise
不起作用,因为当 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();
});
};
我的想法是确定 getGames()
末尾的 caller
,然后根据调用者是谁解决不同的承诺。
您的 getGames()
-函数可以 return 一个一旦从服务器获取游戏就解决的承诺(为了使我的示例代码更短,我省略了服务的参数并假设它 return 是一个承诺):
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();
});
}
$q.when(x)
return 如果 x
不是承诺,则立即用 x
解决的承诺。如果 x
是一个承诺,它 return 直接 x
。
请注意:您的 populateOptions
和 tableParam.reload
函数看起来很像您手动执行的 DOM-东西。这在 angular 中几乎总是错误的 - 让数据绑定为您完成这项工作。