Я отчаянно нуждаюсь в помощи.
У меня есть функция, которая выглядит так:
$scope.getData = function(id)
{
$http.get('/url' + id).success(function (data) {
return data.a.b.c;
});
};
теперь в моей другой функции у меня есть что-то вроде этого:
$scope.obj= {};
$scope.obj.name = $scope.user.displayName;
$scope.commentObj.id= $scope.id;
$scope.obj.blah = blah;
$scope.obj.otherDataThing = $scope.getUserProfileData($scope.commentObj.userId);
теперь эта переменная НИКОГДА не устанавливается, когда я отправляю URL-адрес, чтобы создать фактический объект данных в монго. Он просто не появляется. Я знаю, что это нужно делать с синхронностью, но я не могу понять это. Помогите!
заранее спасибо
Закончился, только решая его, вложив http-звонки. Что-то вроде этого:
http.get = function ...
http.post = function...
не могу поверить, что я не думал об этом до facepalm
вот как я это делаю. мы используем отсрочку
в моем сервисе :: productService.js
angular.module('appName')
.service('ProductService', function ($http, $q, $window) {
var base_url = $window.base_url;
this.get_products = function (data) {
var deferred = $q.defer();
var where = data || {};
$http
.get(base_url + '/item', { params: where })
.then(function (response) {
deferred.resolve(response);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
};
});
то в контроллерах вы можете ввести селектор и получить его через
$scope.products = [];
ProductService
.get_products({ page: self.page })
.then(function (resp) {
$scope.products = resp.a.b;
console.log(resp);
// success response
}, function (err) {
console.log(err);
// Error Response
});
Использовать конвенцию
Сделать обещанную функцию
function MyCoolFunction(passed) {
return $http.get('url' + passed)); //<-- return $http
//_____________________^__________ this should be comma (,)
}
Затем назовите его
$scope.obj= {};
$scope.obj.name = $scope.user.displayName;
$scope.commentObj.id= $scope.id;
//_________________^_____ assigning to id property but using $scope.commentObj.userId
$scope.obj.blah = blah;
MyCoolFunction($scope.commentObj.userId).then(function(successResponse){ // <-- success_callback
$scope.obj.otherDataThing = successResponse.a.b.c; // <-- assignment of result
}, function(errorResponse){ // <-- error callback
$scope.error = errorResponse.message || errorResponse;
});
Просто установите myObj = data
или myObj.prop = data
или myObj.prop.push(data)
или что бы вы ни делали в своем вызове $http
.
function ... = (passed) {
$http.get('url' + passed).success(function (data) {
$scope.myObj = data;
});
}