在angularjs中进行ajax调用后更新变量
我使用factory在angularjs中进行数据库调用在angularjs中进行ajax调用后更新变量,ajax,angularjs,Ajax,Angularjs,我使用factory在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; }); ap
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的值时;它显示未定义的。可能是因为没有从$http调用接收数据。如何同步执行AJAX调用。如所述,不使用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对象,这样您可以确保成功调用值,并且调用后数据可用。从服务返回承诺:
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;
}
});
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;
});
});
不要进行同步调用。他们从阴间释放肮脏的生物。相反,在ajax调用成功完成后,使用回调来执行代码。我无法使用promise。因为orders是一个工厂,在这个工厂中,我需要其他方法来使用这个api密钥。所有这些方法最终都返回obj