Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使我的异步函数成为angular中的承诺?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使我的异步函数成为angular中的承诺?

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

我在AngularJS工作,我有一项服务,其中post方法是:

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,则代码执行没有区别