У меня есть обратный вызов успеха, настроенный для значения, возвращаемого из службы, но когда я ссылаюсь на значение, это обещание, а не простой тип (логический), как я ожидал. Вот основная структура кода:
var ZService = $resource('api/w/:id/zs'); // returns a list of Zs
var XService = $resource('api/x/:id/hasAttribute'); // returns a boolean value
$scope.zList = ZService.query({id:$scope.w.id});
$scope.zList.$promise.then(function(zs) {
for(var i=0; i<zs.length; i++) {
(function(i) {
var z = zs[i];
XService.get({id:z.x.id}).$promise.then(function(has) {
console.log("has: " + has);
z.attr = has;
});
})(i);
}
}
На мой взгляд, я использую <span ng-show="z.attr == true">
(внутри повторителя z in zList
), и этот диапазон никогда не отображается. Если я запишу значение has
в консоль, это покажет, что это обещание, а не логическое значение, как я ожидаю. Точно так же, если я проверю значение z.attr
в отладчике, это объект (разрешенное обещание).
Я использовал промисы в других местах своего кода, и у меня не было проблем, но большую часть времени я присваивал возвращаемое значение переменной в $scope
, поэтому мне интересно, происходит ли какая-то магия. за кулисами. В других местах я возвращаю составные объекты, а не простые значения, поэтому мне также интересно, имеет ли это какое-то отношение к этому.
then()
. Зачем вам сразу вызываемая функция? Можете ли вы опубликовать код в контексте? Что именно возвращается с сервера (буквально)? Куда вы выводите значения в консоль? - person lex82   schedule 22.01.2016XService
использует собственную, ошибочную реализацию промисов. - person Tamas Hegedus   schedule 22.01.2016