如何在严格模式下找到函数调用者
How to find function caller while in strict mode
我有一个函数,getGames()
,在我的Angular控制器中,可以由我的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()
-函数可以返回一个承诺,这是解决一旦游戏已经从服务器(使我的示例代码更短,我省略了参数的服务,并假设它返回一个承诺):
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)
返回一个承诺,如果x
不是承诺,则立即与x
解决。如果x
是一个promise,它直接返回x
。
只是一个注意:你的populateOptions
和tableParam.reload
函数看起来很像你做手工dom的东西。这在angular中几乎总是错误的——让数据绑定为你完成这项工作。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Meteor Router数据函数被调用两次
- 拦截对构造函数的调用
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 比较sessionStorage值时,Javascript函数无法调用
- 如何从构造函数中调用js原型方法
- 使用AJAX将变量发布到不同文件上的php函数并调用该函数
- 从构造函数es6调用静态方法
- 如何在函数中调用函数?(CoffeeScript)
- 我在画布中的鼠标按下函数在调用时不会重绘背景
- Javascript 从函数名称调用函数
- 使用函数按钮调用 ajaxform
- 调用子类函数时调用的超类函数
- 如何使用字符串作为类名并在函数中调用它
- 轮询 ajax 函数超出调用堆栈
- java-script 函数被调用两次
- 使用 Promise 在另一个函数中调用带有 Bluebird 承诺库的函数
- 更改函数名称调用中的单击事件
- 使用promise或setTimeout确定延迟函数的调用顺序
- 如何避免在函数中调用函数