В большинстве обучающих программ angularjs я видел, что цепочки обещаний приводят к изменению переменной области видимости.Возврат вложенных обещаний родительской функции
$http.get(someURL).then(function (value) {
$scope.someValue = value;
});
Возможно ли вернуть это значение родительской функции? Когда-либо метод, который я попробовал, просто возвращает другое обещание.
$scope.test = function(){
return $http.get(someURL).then(function (value) {
return value;
});
};
$scope.test = function(){
var deferred = $q.defer();
$http.get(someURL).then(function (value) {
deferred.resolve(value);
});
return deferred.promise;
}
Я не хочу, чтобы цепь еще обещание, просто вернуть JSON, так что я могу сделать что-то вроде этого:
<button ng-click='some_vars = test()'>Get ajax</button>
<ul ng-repeat='var in some_vars'>
<li>{{var.title}}</li>
</ul>
Нет, потому что вы не можете вернуться из вызова AJAX - вы можете установить переменную области видимости в результате вызова AJAX и вид будет автоматически обновлять. – tymeJV
@tymeJV это не так, зависит от версии, которую использует OP, обещание разворачивания устарело, и я никогда не советую кому-либо это делать, но в Anular 1.2 все еще можно изменить настройки '$ parseProvider', например: '$ parseProvider.unwrapPromises (true);' – Josep
встроить отложенный вклад в обещание - это antipattern https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns, я знаю, что это на стороне сервера, но вы можете считать это ссылкой –