我创建了一个通过$ http.post与服务器通信的服务。
app.factory("dataService", [
"$http", "$q", "$timeout", function ($http, $q) {
function post(url, data) {
var deferred = $q.defer();
$http.post(url, data)
.success(function (result) {
deferred.resolve(result);
})
.error(function (error) {
deferred.reject(error);
});
return deferred.promise;
}
return {
post: post
};
在我正在做的控制器中:
dataService.get(someUrl,someData).
then(function (data) {
$scope.result = data;
});
一切正常,但如果我在其他一些服务中称这个通用的“dataService”为例:
app.factory("userService", ["$http", "$q","dataService", function ($http, $q,dataService) {
function postUser(user) {
dataService.post(usersUrl, user);
}
return {
postUser: postUser
};
}
并在控制器中调用此“userService”
userService.postUser($scope.user).then(){}
,我收到以下错误:
任何人都可以解释为什么会这样吗?
答案 0 :(得分:0)
试试这个:
app.factory("dataService", [
"$http", "$timeout", function ($http) {
function post(url, data) {
return new Promise(function(resolve, reject) {
$http.post(url, data)
.success(function (result) {
resolve(result)
})
.error(function (error) {
resolve(error)
});
});
}
return {
post: post
};
并且
app.factory("userService", ["$http", "$q","dataService", function ($http, $q,dataService) {
function postUser(user) {
return dataService.post(usersUrl, user);
}
// OR
function postUser(user,callback) {
dataService.post(usersUrl, user).then(function(data){callback(data);});
}
return {
postUser: postUser
};
}
希望它有所帮助;)
答案 1 :(得分:0)
我找到了解决方案。只需要将已解决的promise分配给变量然后返回该变量。
function postUser(user) {
var result = dataService.post(usersUrl,user);
return result;
};
答案 2 :(得分:0)
您无需在此处使用find3
。有一些角度服务会返回$q
,例如$promise
。因此,您不应在此处使用$http,$timeout,$interval
,因为$q
服务已经提交了承诺
您的服务应如下所示:
$http
此时您已经有.factory('myService', function($http) {
return {
postMyData : function(){
return $http.post(data);
}
角度服务返回的承诺。现在你可以根据需要解决它(控制器)
例如:
$http
答案 3 :(得分:0)
如果您致电userService.postUser($scope.user).then(){}
,userService
中的功能应返回承诺:
function postUser(user) {
return dataService.post(usersUrl, user);
}