我想知道如何处理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('/');
});
答案 0 :(得分:1)
错误可以从承诺中捕获,但加载不会继续进行。预计将完全处理依赖性承诺列表,并且如果其中一个依赖项失败,则加载过程将无法恢复 - 即使从生成的承诺中捕获错误。
通常它是理想的行为,因为如果要加载依赖项需要一个文件,那么它不能被认为是可选的。
如果文件被认为是可选的,可以明确处理:
deps: ($ocLazyLoad, $q) => {
return $q.all([
$ocLazyLoad.load('iam-not-there.js').catch(err => {}),
$ocLazyLoad.load({
name: "myApp",
files: ['ctrl.js']
})
])
}