我已经定义了以下IndexMangeService
服务,希望预先检查输入参数并在$http
请求后返回一个承诺。
merchant.service('IndexManageService', ['$http', '$q', function($http, $q){
this.getObjectIdByUrl = function(url) {
var deferred = $q.defer();
if (!(/.*ababab.com.*/.test(url))){
deferred.reject("url not correct");
}else{
$http.get('/api/getObjectIdByUrl?url='+url).then(
function success(response){
var json = response.data;
if(json.status == 0){
deferred.resolve({id: json.data.id});
}else{
deferred.reject(json.msg);
}
},
function failed(response){
deferred.reject(response.status);
}
)
}
return deferred.promise;
};
this.getUrlByObjectId = function(id){
var deferred = $q.defer();
$http.get("/api/getUrlByObjectId?id="+id).then(
function success(response){
var json = response.data;
if(json.status == 0){
deferred.promise({
url: "http://cdnimg.gifmiao.com/"+json.data.url
})
}else{
deferred.reject(json.msg);
}
},
function failed(response){
deferred.reject("failed" + response.status);
}
);
return deferred.promise();
}
}]);
但IndexManageService
中的这两个方法一直显示以下错误消息:
在AngularJS中使用$ q我做错了什么?
答案 0 :(得分:4)
正如你的错误所说,承诺不是一个功能。
在getUrlByObjectId()
功能中,更改:
return deferred.promise();
要
return deferred.promise;
答案 1 :(得分:2)
我只是在你的getUrlByObjectId()方法中用promise替换promise()。它会起作用。
延迟对象:
延迟是揭露承诺的对象。它主要有三个 方法resolve(),reject()和notify()。延期退货承诺 宾语。 Deferred完成后,您调用方法resolve(), reject()和notify()。它将回调寄存器调用到 resolve(),reject()或notify()根据它的完成方式。
merchant.service('IndexManageService', ['$http', '$q', function ($http, $q) {
this.getObjectIdByUrl = function (url) {
var deferred = $q.defer();
if (!(/.*ababab.com.*/.test(url))) {
deferred.reject("url not correct");
} else {
$http.get('/api/getObjectIdByUrl?url=' + url).then(
function success(response) {
var json = response.data;
if (json.status == 0) {
deferred.resolve({id: json.data.id});
} else {
deferred.reject(json.msg);
}
},
function failed(response) {
deferred.reject(response.status);
}
)
}
return deferred.promise;
};
this.getUrlByObjectId = function (id) {
var deferred = $q.defer();
$http.get("/api/getUrlByObjectId?id=" + id).then(
function success(response) {
var json = response.data;
if (json.status == 0) {
deferred.promise({
url: "http://cdnimg.gifmiao.com/" + json.data.url
})
} else {
deferred.reject(json.msg);
}
},
function failed(response) {
deferred.reject("failed" + response.status);
}
);
return deferred.promise;
}
}]);