【发布时间】:2014-10-17 19:44:24
【问题描述】:
在大多数 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 这不是真的,取决于 OP 使用的版本,承诺展开已被弃用,我绝不会建议任何人这样做,但在 Anular 1.2 中仍然可以更改设置的
$parseProvider,像这样:$parseProvider.unwrapPromises(true); -
在 promise 中嵌入 defer 是一种反模式 github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns 我知道这是在服务器端,但您可以将其作为参考
标签: javascript angularjs promise angular-promise