码迷,mamicode.com
首页 > Web开发 > 详细

AngularJS $q 异步执行函数服务(延迟执行)

时间:2020-05-27 12:20:35      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:null   promise   arch   情况   长度   过程   执行   href   lis   

AngularJS API / ng / 服务(service) / $q

 $q 是一个帮助处理异步执行函数的服务。

Deferred Api

一个被$q.defer()调用的deferred的新实例。

deferred对象的目的是暴露相关承诺实例,以及APIs被执行的成功或不成功情况,以及任务的状态。

方法:

resolve(value):根据value以解决派生的promise。如果值是通过$q.reject构造的rejection 对象,该promise将被拒绝。

reject(reason):根据reason以拒绝派生的promise。这相当通过 $q.reject构造的rejection 对象来解决。

notify(value):在 promise 被执行的过程中提供状态更新情况。这可能会被多次调用,在promise是被解决还是被拒绝之前。

属性:

promise:承诺,与这个延迟相关的承诺对象。

$scope.getData = function (searchParam) {
    var deferred = $q.defer();

    var param = {
        SobId: 1,
        SearchParam: ‘test‘
    };

    DataSourceService.list(‘ControllerName‘, JSON.stringify(param)).then(function (result) {
        deferred.resolve(result);
    }, function (err) {
        deferred.reject([]);
    }, function () { });

    return deferred.promise;
}

Promise Api

当一个deferred实例被创建时,一个promise实例被创建,并且可以通过调用deferred.promise检索。Promise对象的目的是当它完成后允许需要的地方获得延迟任务的结果。

方法:

then(successCallback,errorCallback,notifyCallback);

无论什么时候,promise是已经(将要)被解决或拒绝,只要结果是可用的,就调用一个成功/错误的回调异步。回调函数带着一个参数被调用:解决的结果或拒绝的原因。此外,在承诺被解决或被拒绝之前,通知回调可能被调用0或多次用来提供一个指示进度。

这个方法返回被successCallback/errorCallback的解决或拒绝的返回值作为一个新的承诺(除非返回值是个promise,在承诺链的承诺和值都被解决的情况下)。它还将通过notifycallback方法的返回值进行通知。promise 不能从notifyCallback方法得到解决或拒绝 。

catch(errorCallback);

promise.then(null, errorCallback) 的快捷方式。

finally(callback,notifyCallback);

允许你观察一个承诺的解决或拒绝,但这样做不能修改最后的值。这可用于promise不论是被解决或拒绝后释放资源或做一些清理。

链式承诺

因为调用本次promise的方法将会返回一个新的延生的promise,它很容易创建一个承诺链:

promiseB = promiseA.then(function(result) {
  return result + 1;
});

当一个承诺解决另一个承诺(这将推迟其进一步的解决)可能创建一个任何长度的链。它可能在链中的任何处暂停/推迟承诺。这使得它可以像$http的响应拦截这类强大的API。

AngularJS $q 异步执行函数服务(延迟执行)

标签:null   promise   arch   情况   长度   过程   执行   href   lis   

原文地址:https://www.cnblogs.com/FH-cnblogs/p/12971420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!