У меня есть служба, которая не ждет. Функция "Успех" для вызова в контроллере. Компилятор анализирует строки после моего вызова из службы, и это не то, что я хочу. Когда я перехожу в режим отладки, у меня есть мои данные только через 10 мс или что-то в этом роде
.factory('myService', ['$http', '$q', function($http, $q){
var deferObject,
myMethods = {
getDepartments: function(d) {
console.log("Am ajuns");
var allDepartments=[];
var promise=$http.get("http://localhost:8087" + "/projects/"+d );
var deferObject = deferObject || $q.defer();
console.log("Am ajuns2");
promise.then(
// OnSuccess function
function(answer){
console.log("Am ajuns3");
// This code will only run if we have a successful promise.
deferObject.resolve(answer);
var setDepartments = new Set();
for (var i = 0; i < answer.data.length; i++) {
setDepartments.add(answer.data[i].department);
}
setDepartments.forEach(function (value) {
var department = {name: value};
allDepartments.push(department);
});
console.log(allDepartments);
return allDepartments;
},
// OnFailure function
function(reason){
// This code will only run if we have a failed promise.
deferObject.reject(reason);
});
return allDepartments;
},
getData: function(d) {
var promise=$http.get("http://localhost:8087" + "/projects/"+d )
var deferObject = deferObject || $q.defer();
promise.then(
// OnSuccess function
function(answer){
// This code will only run if we have a successful promise.
deferObject.resolve(answer);
},
// OnFailure function
function(reason){
// This code will only run if we have a failed promise.
deferObject.reject(reason);
});
return deferObject.promise;
}
};
return myMethods;
}]);
Я решил проблему, используя q.all, которая ждет завершения каждого запроса и только после этого программа идет дальше.
deferObject
для нескольких обещаний? Я могу предвидеть проблему, если вы вызываете оба ваших фабричных метода одновременно, пока оба запроса все еще обрабатываются. Просто перезвони$http
. Вы не можете вернуться из обещания..then
этого вызывающий код перешел с момента его инициации. К тому времени, когда обещание разрешается, уже некудаreturn
. Вот почему вы используете обещания везде, а не смешивать и сочетать. Затем, когда вы возвращаетесь с одного обещания, оно передается следующему в цепочке.