我使用工厂在angularjs中进行数据库调用
var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
var obj = {};
$http.get('test.txt').then(function (data) {
obj.getApiKey = {'Authorization' : data.data};
});
return obj;
});
app.factory("Orders", function ($http, Service) {
var obj = {};
var api_key = Service.getApiKey;
console.log(api_key);
return obj;
});
在上述程序中,当我调用服务工厂的属性并记录 api_key = Service.getApiKey; 的值时,它显示 undefined 。可能是因为没有从$ http调用收到数据。如何同步执行AJAX调用。
答案 0 :(得分:0)
如Jonathan所述,不使用AJAX进行同步调用并不是最佳做法,相反,您可以将promisse作为函数返回并稍后使用:
var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
var obj = {};
obj.getApiKey = $http.get('test.txt').then(function (data) {
return {'Authorization' : data.data};
});
return obj;
});
app.factory("Orders", function ($http, Service) {
var obj = {};
obj.getApiKey = Service.getApiKey.then(function(data){
console.log(data);
return data;
});
return obj;
});
在这种情况下,服务返回一个promisse对象,这样就可以确保成功调用值,并在调用后获得数据。
答案 1 :(得分:0)
var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
var obj = {};
factory.get=function(success,error){
$http.get('test.txt').then(function (data) {
obj.getApiKey = {'Authorization' : data.data};
});
return obj;
}
});
app.factory("Orders", function ($http, Service) {
Service.get(suc,err);
var suc=function()
{
var obj = {};
var api_key = Service.getApiKey;
console.log(api_key);
return obj;
}
});
答案 2 :(得分:0)
从您的服务中退回承诺:
app.factory("Service", function ($http) {
return {
getApiKey: function() {
return $http.get('test.txt');
}
};
});
注入您的服务,并使用Promise API以异步方式获取数据:
app.factory("Orders", function ($http, Service) {
var obj = {};
var api_key = {};
Service.getApiKey().then(function(apiKey) {
api_key = apiKey.data;
});
});