想象一下,在初始化时你有一个带有http.get请求的工厂,如下所示:
app.factory('myService', function($http) {
var someArray = [];
$http.get('someUrl').then(function(response) {
someArray = response.data; /* this does not work */
}
getSomeArray = function() {
return someArray;
}
return {
getSomeArray:getSomeArray
}
}
您如何以正确的方式保存respone.data?
我想知道的原因是我假设服务在控制器之前被初始化,因此向控制器发送一个承诺将导致回调服务以保存变量,需要额外的调用
答案 0 :(得分:1)
据我所知(并在文档中看到),无法异步初始化工厂。因此,在通过外部呼叫getSomeArray()
实际使用之前,无法保证您的响应会保存到本地变量。
你绝对应该使用Promise:只需触发请求并保存承诺:
app.factory('myService', function ($http) {
var responsePromise = $http.get('someUrl').then(function (response) {
return response.data;
}
return {
getSomeArray: getSomeArray
}
function getSomeArray () {
return responsePromise;
}
}
myService.getSomeArray().then(function (someArray) {
// ...
});