首页 > 解决方案 > 如何仅在来自不同文件的代码完成后才执行某些代码?

问题描述

我正在使用 AngularJS,并且我有一个控制器来处理用户的身份验证。然后我有几个不同的控制器进行 API 调用。这些 API 调用需要在身份验证代码完成后执行。

问题是,由于我像下面这样并行加载我的控制器,我什至不知道哪个文件将首先加载和执行:

<script type="text/javascript" src="./app/controllers/authController.js"></script>
<script type="text/javascript" src="./app/controllers/softwareController.js"></script>

我认为这意味着需要在包含这些文件之前将标志或承诺(知道身份验证何时完成)声明为全局标志。

但是我不能在文件之外和之前声明承诺,因为我无法将解析函数传递给它(因为甚至还没有声明身份验证函数)。

解决这个问题的最佳方法是什么?

标签: javascriptangularjspromisees6-promise

解决方案


为身份验证提供服务并将其注入您的控制器。在您的服务中,添加一个带有成功回调的身份验证函数。将此服务注入您的控制器。在您的控制器中,您可以在成功回调函数中执行登录。

服务

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
   });
});

推荐阅读