use*_*820 45 javascript promise angularjs angular-promise
我的服务是:
myApp.service('userService', [
'$http', '$q', '$rootScope', '$location', function($http, $q, $rootScope, $location) {
var deferred;
deferred = $q.defer();
this.initialized = deferred.promise;
this.user = {
access: false
};
this.isAuthenticated = function() {
this.user = {
first_name: 'First',
last_name: 'Last',
email: 'email@address.com',
access: 'institution'
};
return deferred.resolve();
};
}
]);
Run Code Online (Sandbox Code Playgroud)
我config通过以下方式在我的文件中调用它:
myApp.run([
'$rootScope', 'userService', function($rootScope, userService) {
return userService.isAuthenticated().then(function(response) {
if (response.data.user) {
return $rootScope.$broadcast('login', response.data);
} else {
return userService.logout();
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
但是,它抱怨说这then不是一个功能.我不回复已解决的承诺吗?
And*_*aus 98
已解决的承诺:
return $q.when( someValue ); // angular 1.2+
return $q.resolve( someValue ); // angular 1.4+, alias to `when` to match ES6
Run Code Online (Sandbox Code Playgroud)
拒绝的承诺:
return $q.reject( someValue );
Run Code Online (Sandbox Code Playgroud)
mcc*_*inz 34
退还你的承诺,退回deferred.promise.
承诺API具有'then'方法.
https://docs.angularjs.org/api/ng/service/$q
调用resolve不会返回一个promise,它只表示promise被解决的承诺,因此它可以执行'then'逻辑.
基本模式如下,冲洗并重复
http://plnkr.co/edit/fJmmEP5xOrEMfLvLWy1h?p=preview
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.3.0-beta.5"
src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div ng-controller="test">
<button ng-click="test()">test</button>
</div>
<script>
var app = angular.module("app",[]);
app.controller("test",function($scope,$q){
$scope.$test = function(){
var deferred = $q.defer();
deferred.resolve("Hi");
return deferred.promise;
};
$scope.test=function(){
$scope.$test()
.then(function(data){
console.log(data);
});
}
});
angular.bootstrap(document,["app"]);
</script>
Run Code Online (Sandbox Code Playgroud)
Bro*_*cco 20
从您的服务方式:
function serviceMethod() {
return $timeout(function() {
return {
property: 'value'
};
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
在你的控制器中:
serviceName
.serviceMethod()
.then(function(data){
//handle the success condition here
var x = data.property
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108605 次 |
| 最近记录: |