如何处理 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']
})
])
}
我想知道如何处理 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']
})
])
}