我有以下功能:
getX: function ($scope) {
$http.get('/api/X/GetSelect')
.success(function (data) {
...
...
})
.error(function (data) {
...
});
},
我希望这总是在.success块中执行操作,但我希望它也能返回 一个承诺,以便我可以这样称呼:
getX($scope)
.then( function () {
doNextThing();
}
有人可以通过告诉我如何编码来帮助回复承诺吗?
答案 0 :(得分:5)
您只需在$ http.get()方法之前添加return语句。这将回报承诺。
示例:
return $http.get('/api/X/GetSelect')
.success(function (data) {
...
...
})
.error(function (data) {
...
});
答案 1 :(得分:3)
很简单,你自己回复一个承诺。您需要为此注入$q
(take a look at the docs for more information)。
然后您可以将代码更新为:
getX: function ($scope) {
var defer = $q.defer();
$http.get('/api/X/GetSelect').success(function (data) {
...
...
defer.resolve();
}).error(function (data) {
...
defer.reject();
});
return defer.promise;
}
答案 2 :(得分:2)
function getX($scope)
{
var defered = $q.defer();
$http.get('/api/X/GetSelect')
.success(function (data) {
defered.resolve(data);
...
})
.error(function (data) {
defered.reject();
});
return defered.promise();
}
您需要在控制器中注入$ q。
答案 3 :(得分:1)
您可能需要使用延期承诺。这就是你如何做到的。
var functionA = function () {
var deferred = $q.defer();
$http.get('url here').
success(function (response) {
deferred.resolve(response);
}).
error(function (response) {
});
return deferred.promise;
}
现在调用functionA应该会返回一个可以根据需要执行操作的承诺。