以下代码中$ 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;
}
答案 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。