[英]Angular promise multiple times
我正在尝试复制像couchDB这样的系统。 我的后端是Parse服务器,我的前端是Ionic(1)
我想要实现的是用localstorage来固定我的应用程序。
目前:GetUserAds
- >有localstorage吗?
- >是的
--->返回localstorage
- >不
--->获取数据库调用
---->返回并放置本地
但我真正想要的是本地返回在后台获取数据库并返回该数据,如果它已更改
这是因为我的应用程序有很多用户并且变化很大。
我可以这样做吗?
getUserAds(user).then(function(data) {
//Local data
}).then(function(dataDB) {
//Database updated data
})
您可以使用角度承诺提供的notify
回调:
function UserService($timeout, $q) {
var users = ["user1", "user2"]; //localStorage.getItem('users');
function get() {
var deferred = $q.defer();
//call your backend here $http.get('....')
$timeout(function() {
//if(remoteUsers !== users) {
deferred.resolve({local: false, users: users.concat('user3')});
//}
}, 3000);
$timeout(function() {
if(users) {
deferred.notify({local: true, users: users});
}
}, 100)
return deferred.promise;
}
return {
get: get
};
}
并在你的控制器
function MyCtrl($scope, $users) {
$scope.name = 'Superhero';
$scope.myUsers = [];
$users.get()
.then(setUsers, null, setUsers);
function setUsers(users) {
$scope.myUsers = users;
}
}
在这里你可以看到一个小小的jsfiddle: http : //jsfiddle.net/Lvc0u55v/1596/
如果您使用Angular API中的此服务,您可以这样做: Angular Promises 。
我就是这样做的:
getUserAds(user).then(function(response) {
// useMyData
});
function getUserAds {
if( thereIsLocalData ) {
return getLocalData(); // this returns a $q promise
} else {
return getDataDB() // Here I'm returning an $http Promise
}
}
function getDataDB (params) {
return $http.get(host, params, {}); // I'm returning the $http Promise!
}
function getLocalData (params) {
return $q(function(resolve, reject) {
resolve(myLocalData);
}); // return the $q promise!
}
这样,您可以像在线通信一样使用本地通信,并且可以简化逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.