Javascript 如何使我的异步函数成为angular中的承诺?
我在AngularJS工作,我有一项服务,其中post方法是:Javascript 如何使我的异步函数成为angular中的承诺?,javascript,angularjs,Javascript,Angularjs,我在AngularJS工作,我有一项服务,其中post方法是: var xhrService = { post: function(url, data) { xhr = new XMLHttpRequest(); xhr.open("POST", url); xhr.send(data); return xhr; }} 我希望能够像内置的angular服务一样使用此服务,并使用成功和错误方法。 如果不使用其他库,这将非常好。您至少需要$q服务来创建defer
var xhrService = {
post: function(url, data) {
xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.send(data);
return xhr;
}}
我希望能够像内置的angular服务一样使用此服务,并使用成功和错误方法。
如果不使用其他库,这将非常好。您至少需要$q服务来创建deferred,然后从函数返回deferred.promise。然后根据结果解决或拒绝它
var deferred = $q.defer();
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function() {
if (req.status == 200) {
deferred.resolve(req.response);
}
else {
deferred.reject(req.statusText);
}
}
req.onerror = function() {
deferred.reject('error');
};
req.send();
return deferred.promise;
你为什么不直接使用$http服务呢?他不必这样做,他可以自己做。下面是我的答案。但我同意使用$http是标准的,也是推荐的。但是如果他出于任何原因想要的话,他可以没有它生活。我用xhr上传文件。。。有没有办法用$http服务做到这一点?据我所知,看起来不错,只是你没有发送XHR?谢谢,尽管我想使用success&error,但success和error方法是特定于扩展标准promise API的$http服务的。如果使用then或success和error,则代码执行没有区别