gpt4 book ai didi

javascript - 如何使用 resolve 和 $routeChangeError 处理嵌套服务和 promise

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:30 24 4
gpt4 key购买 nike

这更像是我在玩 AngularJS 时所做的一项研究,我想分享一下,因为我认为有些人可能会觉得这很有用。

有时您需要在实例化 Controller 和呈现 View 之前从多个服务中获取一些数据。

您还可能遇到特定服务正在等待来自另一个服务的响应的情况 - 有点嵌套服务结构。

最重要的是,您要确保如果这些服务中的任何一个失败,您将相应地处理错误。

最佳答案

模块 myApp 必须提供名为 myFirstServicemySecondService 的服务。

如果您通过拒绝服务使任何服务失败:

defer.reject("second Service Failed");

$routeChangeError 事件被触发,并在控制台中向用户显示一条消息。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myApp</title>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"> </script>

<script>

var myApp = angular.module('myApp', []);

myApp.config(function($routeProvider){
$routeProvider
.when('/',
{
controller: 'ViewCtrl',
templateUrl: 'view/app.html',
resolve: {
loadData: function(myFirstService){
return myFirstService.start();
}
}
})
});

var appCtrl = myApp.controller('AppCtrl', function($scope, $rootScope){
$rootScope.$on('$routeChangeError', function(event, current, previous, rejection){

console.log('Some service has failed: ', rejection);

});
});

var viewCtrl = myApp.controller('ViewCtrl', function($scope, $route){

$scope.feedback = {
message: 'All the services are working!'
}

});

myApp.factory('myFirstService', ['$q', '$timeout','mySecondService', function($q, $timeout, mySecondService) {
var defer = $q.defer();

return {

start: function() {

$timeout(function(){
defer.resolve('FIRST Service \'myFirstService\' Failed');
}, 2000);

return mySecondService.start().then(function(){
return defer.promise
});

}
}
}]);


myApp.factory('mySecondService', ['$q', '$timeout', function($q, $timeout) {
var defer = $q.defer();

return {

start: function() {

$timeout(function(){
defer.resolve("second Service Failed");
}, 2000);

return defer.promise;

}
}
}]);

</script>

</head>
<body ng-app="myApp" ng-controller="AppCtrl">

<script id="view/app.html" type="text/ng-template">

<h1>{{ feedback.message }}</h1>

</script>

<div ng-view></div>

</body>
</html>

关于javascript - 如何使用 resolve 和 $routeChangeError 处理嵌套服务和 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com