Javascript 角http
我有一个请求功能:Javascript 角http,javascript,angularjs,Javascript,Angularjs,我有一个请求功能: function search(request) { return $http.post('/path/to/resource', request); } 我可以这样称呼它: search({/*...*/}) .success(function() {}) .error(function() {}) searchById().then(successCallback, errorCallback); searchById() .success(suc
function search(request) {
return $http.post('/path/to/resource', request);
}
我可以这样称呼它:
search({/*...*/})
.success(function() {})
.error(function() {})
searchById().then(successCallback, errorCallback);
searchById()
.success(successCallback)
.error(errorCallback);
由于我经常需要通过ID查找某些对象,因此我需要一个快捷功能。我找不到如何创建此函数,以便还可以将其与success()
和error()
函数链接
我搜索了如何在angular中创建承诺,并找到了,这就是我尝试的:
function searchById(id) {
var deferred = $q.defer();
search({id: id}).
then(function (response) {
deferred.resolve(response.data.results[0]);
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
}
我只能这样称呼它:
search({/*...*/})
.success(function() {})
.error(function() {})
searchById().then(successCallback, errorCallback);
searchById()
.success(successCallback)
.error(errorCallback);
我想这样称呼它:
search({/*...*/})
.success(function() {})
.error(function() {})
searchById().then(successCallback, errorCallback);
searchById()
.success(successCallback)
.error(errorCallback);
关于$q
的文档表明它返回一个promise
,而关于$http
的文档表明它返回一个httpPromise
,但我不知道如何创建httpPromise
有什么想法吗?在示例中,错误回调应该是catch而不是error,试试这个
searchById()
.then(successCallback)
.catch(errorCallback);
sjokkogutten是正确的,您不需要使用$q。在这种情况下,您可以简化它
var deferred = $q.defer();
search({id: id}).
then(function (response) {
deferred.resolve(response.data.results[0]);
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
对此
return search({id: id}).
then(function (response) {
return response.data.results[0];
}
在示例中,错误回调应该是catch而不是error,请尝试以下操作
searchById()
.then(successCallback)
.catch(errorCallback);
sjokkogutten是正确的,您不需要使用$q。在这种情况下,您可以简化它
var deferred = $q.defer();
search({id: id}).
then(function (response) {
deferred.resolve(response.data.results[0]);
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
对此
return search({id: id}).
then(function (response) {
return response.data.results[0];
}
$http
已返回承诺,因此无需使用$q.defer()
。此外,success()
和error()
已经贬值(从1.4.4开始),您应该使用then()
。
按如下方式调用函数:
search(request).then(function(data){
// successcallback
}, function(error){
// errorcallback
})
$http
已返回承诺,因此无需使用$q.defer()
。此外,success()
和error()
已经贬值(从1.4.4开始),您应该使用then()
。
按如下方式调用函数:
search(request).then(function(data){
// successcallback
}, function(error){
// errorcallback
})
下面是一个实际的例子:
app.controller('controller',function($scope,$rootScope,$http,){
$scope.login = function(request){
var promise = $http.post(/path/to/resource, request, {
headers: {
'Content-Type': 'application/json'
}
}).then(function success(res){
//it worked, you have data in res
},function error(res){
// it failed
});
};
});
下面是一个实际的例子:
app.controller('controller',function($scope,$rootScope,$http,){
$scope.login = function(request){
var promise = $http.post(/path/to/resource, request, {
headers: {
'Content-Type': 'application/json'
}
}).then(function success(res){
//it worked, you have data in res
},function error(res){
// it failed
});
};
});
使用$http函数创建工厂将允许您使用
.success
和.error
。但是你真的应该使用。然后
app.factory("dataService", function($http) {
return {
search: function() {
return $http.get('path/to/api');
},
searchById: function(payload) {
return $http.post('path/to/api', payload);
},
searchMoreThings: function(payload) {
if(payload === "foo") payload = "bar";
return $http.post('path/to/api', payload);
}
}
});
你可以做:
dataService.searchById(searchTerm).success().error();
使用$http函数创建工厂将允许您使用.success
和.error
。但是你真的应该使用。然后
app.factory("dataService", function($http) {
return {
search: function() {
return $http.get('path/to/api');
},
searchById: function(payload) {
return $http.post('path/to/api', payload);
},
searchMoreThings: function(payload) {
if(payload === "foo") payload = "bar";
return $http.post('path/to/api', payload);
}
}
});
你可以做:
dataService.searchById(searchTerm).success().error();
.success
和.error
已被弃用。您应该使用标准的。然后改为。$http服务和$q使用了受Kris Kowal的q启发的相同类型的承诺。。success
和。error
被弃用。您应该使用标准的。然后改为使用。$http服务和$q使用的承诺类型与Kris Kowal的q所启发的承诺类型相同。对于成功/错误否决,我不会使用它。有一点不清楚,那就是我的问题:在将结果发送到“success”回调之前,我还想对结果进行一些中间计算(在这里我调用deferred.resolve(response.data.results[0]);
)。我可以在不创建新承诺的情况下包含此计算吗?为什么需要在成功回调之前进行计算?您不能从回调本身内部执行吗?i、 e.dataService.searchById(searchTerm).then(函数(响应){/*对response.data*/},函数(响应){/*error*/})代码>确定成功/错误弃用,我将不使用它。有一点不清楚,那就是我的问题:在将结果发送到“success”回调之前,我还想对结果进行一些中间计算(在这里我调用deferred.resolve(response.data.results[0]);
)。我可以在不创建新承诺的情况下包含此计算吗?为什么需要在成功回调之前进行计算?您不能从回调本身内部执行吗?i、 e.dataService.searchById(searchTerm).then(函数(响应){/*对response.data*/},函数(响应){/*error*/})
而不是then(success,error)
,最好使用。then(…).catch(…)
。而不是then(success,error)
,最好使用。then(…).catch(…)
。