如何在ocLazyLoad中处理404 - 资源未找到错误

时间:2017-06-22 08:54:37

标签: javascript angularjs angular-ui-router oclazyload

我想知道如何处理ocLazyLoading中的资源加载错误。我尝试在$stateProvider内的解析部分加载一些资源。有一个文件ctrl.js可供加载。另一个名为iam-not-there.js的文件正在尝试加载,但此资源不存在。

现在我想处理这个“加载”错误(即使资源加载出错,处理/捕获资源加载错误等等,也要继续解析部分)。如果可以加载所有资源,它就可以正常工作。一旦无法加载一个资源,应用程序就不会继续解析状态。这是一个 plnkr example 来重现此问题。

var myApp = angular.module("myApp", ['ui.router', 'oc.lazyLoad']);

myApp.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider
        .state('login', {
            url: '/',
            templateUrl: 'template.html',
            controller: 'LoginController',
            resolve: {
                deps: ['$ocLazyLoad', function($ocLazyLoad) {
                    return $ocLazyLoad.load({
                      name: "myApp",
                      files: [
                        'ctrl.js',
                        'iam-not-there.js'
                      ] 
                    });
                }]
            } 
        });

    $urlRouterProvider.otherwise('/');
});

1 个答案:

答案 0 :(得分:1)

错误可以从承诺中捕获,但加载不会继续进行。预计将完全处理依赖性承诺列表,并且如果其中一个依赖项失败,则加载过程将无法恢复 - 即使从生成的承诺中捕获错误。

通常它是理想的行为,因为如果要加载依赖项需要一个文件,那么它不能被认为是可选的。

如果文件被认为是可选的,可以明确处理:

deps: ($ocLazyLoad, $q) => {
  return $q.all([
    $ocLazyLoad.load('iam-not-there.js').catch(err => {}),
    $ocLazyLoad.load({
      name: "myApp",
      files: ['ctrl.js']
    })
  ])
}