. Это довольно просто:
Вот рабочая версия вашего кода:
(async function(){
var response = await superagent.get('...')
console.log(response)
})()
ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]
Вам нужно понять, что вы не можете вернуться из асинхронных операций. Ответ просто не доступен, когда вы пытаетесь вернуть данные. Как правило, в Javascript вы должны использовать обратный вызов или шаблон обещания. В угловом обещании очень естественный выбор.
app.service("GetDivision", ["$http", function($http) {
this.division = function(divisionNumber){
return $http.post("/api/division", {division:divisionNumber}).success(function(data){
return data;
});
}
}]);
и в контроллере:
GetDivision.division(1).then(function(data) {
$scope.division = data;
});
Убедитесь, что вы прочитали этот очень популярный поток по теме: Как сделать Я возвращаю ответ от асинхронного вызова?
Вы можете вернуть пустой объект из своей службы и заполнить его после получения ответа. Так поступают службы $resource
. Это также позволяет избежать дополнительной логики в контроллере.
Это будет работать, потому что ссылка на объект data
, который помещается в область действия, остается неизменной все время, а $http
служба начинает цикл дайджест после ответа вернулся. Поэтому изменение в scope.division
будет немедленно обнаружено, и просмотр будет соответствующим образом обновлен.
JavaScript
var app = angular.module('app',[]);
app.service("GetDivision", ["$http", function($http){
var data = {};
this.division = function(divisionNumber){
$http.get("division", {division:divisionNumber}).success(function(responseData){
angular.extend(data, responseData);
});
return data;
}
}]);
app.controller('ctrl', ['$scope', 'GetDivision', function ($scope, GetDivision) {
$scope.division = GetDivision.division(1);
}]);
HTML
<body ng-controller="ctrl">
<h1>{{division.text}}</h1>
</body>
Live Demo : http://plnkr.co/edit/H31mSaXiiCiVG9BA9aHK?p=preview