javascript - 如何仅在来自不同文件的代码完成后才执行某些代码?
问题描述
我正在使用 AngularJS,并且我有一个控制器来处理用户的身份验证。然后我有几个不同的控制器进行 API 调用。这些 API 调用需要在身份验证代码完成后执行。
问题是,由于我像下面这样并行加载我的控制器,我什至不知道哪个文件将首先加载和执行:
<script type="text/javascript" src="./app/controllers/authController.js"></script>
<script type="text/javascript" src="./app/controllers/softwareController.js"></script>
我认为这意味着需要在包含这些文件之前将标志或承诺(知道身份验证何时完成)声明为全局标志。
但是我不能在文件之外和之前声明承诺,因为我无法将解析函数传递给它(因为甚至还没有声明身份验证函数)。
解决这个问题的最佳方法是什么?
解决方案
为身份验证提供服务并将其注入您的控制器。在您的服务中,添加一个带有成功回调的身份验证函数。将此服务注入您的控制器。在您的控制器中,您可以在成功回调函数中执行登录。
服务
angular.module('app', []).service('authService', function(){
this.authenticate = function(successCallback) {
// Perform authentication here
successCallback();
}
});
控制器
angular.module('app').controller('firstCtrl', function($scope, authService){
authService.authenticate(function onSuccess(){
// Authentication was successful
});
});
推荐阅读
- scala - 为什么不同名称的案例类和对象出现在同一个scala文件中?
- sql - 拆分要在 IN 运算符中使用的字符串
- excel - 循环以将工作表保存在新工作簿中
- scala - 如何在 Scala 中创建不可变的双链表?
- r - ans[npos] <- rep(no, length.out = len)[npos] 中的错误:替换的长度为零
- r - For循环对r中数据框列中的值求和
- javascript - 当 html 在表单中时,我的 JavaScript 不运行
- ios - 为什么 cocoapods 不能在 Apple Silicon 上工作?
- opencv-python - 导入 cv2 错误未定义符号:PyCMethod_New
- ansible - 如何在单个或简短的主机列表上运行剧本并从主机不属于的清单组中获取内容?