这里需要$ timeout吗?

时间:2015-07-05 12:46:24

标签: javascript angularjs

createRequest = function(endpoint, params, data) {
    var xdr = new $window.XDomainRequest();
    var x2js = new xml2Json();
    var deferred = $q.defer();
    $timeout(function() {
        if (xdr) {
            xdr.onerror = function() {
                $rootScope.$apply(function() {
                    deferred.reject(xdr.responseText);
                });
            };
            xdr.onload = function() {
                $rootScope.$apply(function() {
                    var jsondata;
                    if (xdr.responseText) {
                           deferred.resolve(jsondata);    
                    } else {
                        jsondata = "No data";
                    }
                });
            };
            xdr.open("post", urlMaker(endpoint, params));
            if (data) {
                var requestData = serviceFactory.requestTranform(data);
                xdr.send(requestData);
            } else {
                xdr.send();
            }
        }
    }, 2000);
    return deferred.promise;
};
  1. 这里$timeout的目的是什么?删除它是ajax调用失败,还需要2ms秒?

1 个答案:

答案 0 :(得分:0)

$timeout确保调用是异步进行的,2000实际上意味着它将在2秒后执行。您可以删除2000,以便尽快执行它,但需要异步运行才能使此代码正常工作。

deferred.promise负责返回ajax调用完成后可用的最终对象。