AngularJS http return value
AngularJS http return value
我想在AngularJS中写一个返回值的函数(实际上它是一个字符串)。这个值是由http请求返回的,但是async快把我逼疯了。
我的第一次尝试是:
this.readParameter = function(key) {
$http({
method: "GET",
url: "XXXXXXX",
headers: { 'Content-Type': 'application/json' }
}).then(function successCallback(response) {
return response.data;
}, function errorCallback(response) {
throw new Error("Error");
})
};
但是,由于Angular的异步特性,它当然不能工作。数据未定义)
怎么做?我只是想返回值(字符串),所以我可以像
这样使用这个函数var a = readParameter("key1")
你可以在函数外定义一些初始值的变量,在成功函数内定义一个响应集值,而不是返回它。
委派模式在这里可以很好地将$http
任务分配给一些服务,并使用回调方法进行响应。
Controller
(Call Service for specific request) -> Service
(Manage request params and other things and return factory response to Controller) -> Factory
(Send request and return to Service)
Callback的基本示例
var myVariable = '';
function myFunction (key, callback) {
$http({
method: "GET",
url: "XXXXXXX",
headers: { 'Content-Type': 'application/json' }
}).then(function successCallback(response) {
callback(response);
}, function errorCallback(response) {
throw new Error("Error");
})
};
function myCallbackFunction(response) {
myVariable = response.data; // assign value to variable
// Do some work after getting response
}
myFunction('MY_KEY', myCallbackFunction);
这是设置值的基本示例,但使用了上面示例中的回调模式。
var myvariable = '';
function myFunction (key) {
$http({
method: "GET",
url: "XXXXXXX",
headers: { 'Content-Type': 'application/json' }
}).then(function successCallback(response) {
myvariable = response.data; // set data to myvariable
// Do something else on success response
}, function errorCallback(response) {
throw new Error("Error");
})
};
myFunction('MY_KEY');
不要尝试混合异步和同步编程。相反,使用回调来使用
readParameter("key1", callback)
例如: this.readParameter = function(key, callback) {
$http({
method: "GET",
url: "XXXXXXX",
headers: { 'Content-Type': 'application/json' }
}).then(function successCallback(response) {
callback(response)
}, function errorCallback(response) {
throw new Error("Error");
})
};
我使用promise:
来解决这个问题的例子:
在Service (invoicesAPIservice => invoicesAPIservice .js)中使用:
angular.module('app')
.service('invoicesAPIservice', function ($http) {
this.connectToAPI= function () {
return new Promise(function(resolve,reject){
var options = {
method:'GET',
url :'',
headers:{
'X-User-Agent': '....',
'Authorization': '....',
}
};
$http(options).then(function successCallback(response) {
resolve(response);
//console.log(response);
},function errorCallback(response) {
reject(response);
})
});
});
});
和在你的控制器(mainCtrl=> mainCtrl.js):
angular.module('app').controller('mainCtrl', function($scope,invoicesAPIservice) {
$scope.connectToAPI=function () {
invoicesAPIservice.connectToAPI().then(function (content) {
console.log(content.statusText);
}.catch(function (err) {
//console.log(err);
alert("Server is Out");
});
}
});
在你的页面:index.html:
<button ng-click="connectToAPI()"></button>
:)
相关文章:
- 在ember/handlers中使用value和valueBinding有什么区别
- jquery if语句返回return wong语句
- 函数在return语句之前返回空对象
- Javascript Return and if/else
- 需要url导航从DropDown Value onClick按钮传递url变量
- Fizz Buzz return value javascript
- 为什么我需要写“;function(value){return my_function(value);作为node.js
- Return <td> value via onclick()
- How does jQuery's .not() return value affect .hide()?
- Javascript & jquery return value
- Jscript CRM Return Value
- document.getElementById().value return undefined in chrome
- return value from onClick
- Meteor.WrapAsync don't return value
- AngularJS http return value
- return object if list<object> value is exists (Javascr
- javascript innerhtml return value
- Java Script Return Value
- Sharepoint Online executeQueryAsync JSOM - Return Value
- 通过AJAX在JavaScript中生成一个变量return Value