1

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

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

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('/');
});
4

1 回答 1

1

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

通常这是可取的行为,因为如果加载依赖项需要文件,则不能将其视为可选是合理的。

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

deps: ($ocLazyLoad, $q) => {
  return $q.all([
    $ocLazyLoad.load('iam-not-there.js').catch(err => {}),
    $ocLazyLoad.load({
      name: "myApp",
      files: ['ctrl.js']
    })
  ])
}
于 2017-06-22T09:42:52.117 回答