Проблема:
Я делаю (что, по-моему, но, возможно, нет), просто angular.forEach
над массивом, а затем используя $resource
, чтобы сделать вызов на основе каждого возвращаемого значения. Результатом каждого вызова является объект, как я ожидаю. Но я не могу заставить эти объекты гармонично объединиться в том, как демонстрируется angular.forEach документация.
Но сначала, какой-то код, который работает, а затем посмотрите на код, который терпит неудачу.
Работы
var uniqueIds = {};
angular.forEach(object, function(key, value){
this.push(key.uniqueIds);
}, uniqueIds);
console.log(uniqueIds)
// uniqueIds equals the expected array
Не удается
Здесь, где вещи становятся хитрыми. Теперь, в следующем примере, внутри angular.forEach
есть вызов $resource
.
angular.forEach(array, function(index){
Resource.query({id:index}, function(result){
console.log(result)
// returns the expected object,
// but, as expected, I can't access the object outside the async call
});
console.log(result);
// result is undefined
});
Учитывая асинхронность, кажется, что обещание может решить проблему. Но это не так... Я все еще в асинхронном разговоре. Не назначается result
$scope
. Короче говоря, я не могу получить значение вне Resource.query
.
Что мне нужно делать?
Мне нужен возвращаемый объект каждого вызова $resource
, чтобы добавить один объект (используя angular.extend? Я пробовал это) так же, как angular.forEach
создал массив. Я пробовал много разных подходов, большинство из них основывалось на ответах на общие асинхронные вопросы, заданные здесь, но до сих пор безрезультатно. Я уверен, что это проблема с получением значения из вызова $resource
, но как это сделать в этом случае, я немного озадачен.