我有这个函数用于调用$ http,执行一些代码然后返回成功或拒绝承诺。
function getActions() {
var self = this;
var defer = this.$q.defer();
this.$http({
url: '/api/Action/GetActions',
method: "GET"
})
.success(function (data) {
// Other code here for success
self.Actions = data;
return defer.resolve();
})
return defer.promise;
};
我想通过以下操作来简化:
return this.$http({
url: '/api/Action/GetActions',
method: "GET"
})... etc
但如果我这样做,那么我将无法获得成功的任何代码。
有人能告诉我是否有任何方法可以简化代码?
答案 0 :(得分:3)
function getActions()
{
var self = this;
var promise = this.$http({
url: '/api/Action/GetActions',
method: "GET"
});
promise.success(function (data) {
// Other code here for success
self.Actions = data;
});
return promise;
}
答案 1 :(得分:0)
您可以使用
function getActions() {
return this.$http({
url: '/api/Action/GetActions',
method: "GET"
})... etc
}
getActions().success(function(data){
self.Actions = data;
//...do other stuff on success as well
})
我个人更喜欢你原来的方法,因为它允许多个then / success / fail块(一个在http请求之后发生,一个可选,你可以在你的返回的promise中设置)。我实际上一直使用这种方法,即使它有点长。
答案 2 :(得分:0)
从success
返回的承诺中添加的error
和$http
方法在承诺链方面的行为不符合标准then
或catch
。如果您使用then
,则可以将承诺链接为标准:
function getActions() {
var self = this;
return this.$http({
url: '/api/Action/GetActions',
method: "GET"
}).then(function(response) {
// Other code here for success
self.Actions = response.data;
return response;
});
};
我的建议是忽略success
和error
的存在,并使用then
和catch
。