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

How to handle 404 - resource not found error in ocLazyLoad

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

现在我想处理这个"loading"错误(即使资源加载错误,handle/catch资源加载错误等,也继续解决部分...... ).如果我所有的资源都可以加载,它就可以正常工作。一旦无法加载一种资源,应用程序就不会继续解析状态。这里有一个 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('/');
});

可以从 promise 中捕获错误,但加载不会继续进行。预计会完全处理依赖项承诺列表,如果其中一个依赖项失败,加载过程将不会恢复 - 即使从结果承诺中捕获了错误。

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

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

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