以下のシナリオがあります。特定のURLのデータが必要です。このデータを、コントローラのどこでも呼び出せる変数に保存する必要があります。こうした問題を克服するために、私は以下のようなサービスを書かれています:
app.service("userData", function ($http, $q) {
var deferred = $q.defer();
this.getUsers = function() {
return $http.get('/users')
.then(function (response) {
deferred.resolve(response.data);
return deferred.promise;
}, function (response) {
deferred.reject(response);
return deferred.promise;
})
;
};
});
をそして、私のコントローラは、次のようになります。
app.controller('UserCtrl', function($scope, $q, userData) {
var myData = userData.getUsers()
.then(
function (result) {
$scope.users = result;
},
function (error) {
console.log(error.statusText);
}
);
console.log(myData)
});
それは出力します。
それでは、どのように私ができますコントローラ全体にアクセス可能な変数にデータを格納しますか?あなたがキャッシュされたデータを取得するために、その後userService.getUserInfo()いつでも呼び出すことができます
angular.module("app").factory("userService", userService);
userService.$inject = ["$http", "$q"];
function userService($http, $q) {
var deferred = $q.defer();
var promise = null;
var currentUser = null;
return {
getUserInfo: function() {
if (promise) {
deferred.resolve(currentUser);
return (currentUser) ? deferred.promise : promise;
}
else {
promise = $http.get("http://swapi.co/api/people/1/").then(function (response) {
return currentUser = response.data.name;
});
return promise;
}
}
}
}
: おかげで..
**は非同期**の素晴らしい世界へようこそ役に立てば幸い!あなたはそれをすることはできません。 http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks
'$ http.get'はすでに約束を返しています。あなたの「延期」は全く役に立たない。 – SLaks