如何使我的异步函数成为角度的承诺?

时间:2014-08-26 09:05:58

标签: javascript angularjs

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

var xhrService = {
  post: function(url, data) {
    xhr = new XMLHttpRequest();
    xhr.open("POST", url);
    xhr.send(data);
    return xhr;
}}

我希望能够像内置(有角度)$http服务一样使用此服务,并取得成功。错误方法。 如果没有使用其他库,那将是非常好的。

1 个答案:

答案 0 :(得分:2)

您需要至少$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;