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


    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。

  • 相关阅读:
    Asp.Net Core中Session使用
    服务器开发- 牌和牌的基本操作
    服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
    Lua Table转C# Dictionary
    Asp.Net Core 2.1+的视图缓存(响应缓存)
    C#中await和async关键字的简单理解
    SQLSERVER中分割字符串成多列
    Asp.Net Core Identity+EFCore + Mysql踩坑记录
    小试牛刀2:JavaScript基础题
    CSS典型案例实践
  • 原文地址:https://www.cnblogs.com/FH-cnblogs/p/12971420.html
Copyright © 2020-2023  润新知