$ j.defer()在angularjs上下文中的代码中是什么

时间:2016-11-09 13:24:03

标签: angularjs

以下代码中$ q.defer()的用途是什么。我有点困惑或无法理解$ q或defer的使用?

  service.serviceCall = function (methodName, params) {
    var deferred = $q.defer();
    $http({ method: "POST", url: url + methodName, data: params, headers: headers }).success(function (result) {
        deferred.resolve(result);
    }).error(function (result) {
        deferred.reject(result);
    });
    return deferred.promise;
}

3 个答案:

答案 0 :(得分:0)

service.serviceCal("POST", {"param1":"value1"}).then(function(data){
  //here data will be object which is resolved in success call
}).fail(function(){
 //here data will be object which is rejected in failure call
})

这是承诺,我们使用$ q.defer()来使用defer.promise()返回一个promise。它是调用对象和承诺之间的契约,将来调用对象(此时失败)将最终得到一个值,或者失败取决于它是否已被解析或拒绝。

答案 1 :(得分:0)

在此处阅读承诺:Promises

浏览$ q模块的文档:$q Module Angular

  

一种帮助您异步运行函数并使用它们的服务   完成处理后返回值(或例外)。

所以promises用于异步编程。 $ q是Angular的承诺实现。

使用上述功能:

service.serviceCal(methodName, params)
.then(function(resolve){

    // on successful resolving
    // called when defer.resolve is called
    // resolved object: resolve

}, function(reject){

    // on reject
    // called when defer.reject is called
    // rejected object: reject

})

答案 2 :(得分:0)

代码在调用 select * from dbo.vwExample 的结果上使用了弃用的方法。虽然$http会返回一个承诺,但它有一些额外的方法$http.success在通常的承诺结构中不起作用。

.error创建一个从函数返回的promise,此代码使用$q.defer()success来解析promise。编写此代码的一种更简单的方法是使用error及其$http方法返回的promise。

.then

这与原始代码具有相同的效果:它返回一个promise,该promise将解析为响应中的数据,或者如果发生错误,则拒绝promise。