iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Angularjs中Promise的示例分析
  • 919
分享到

Angularjs中Promise的示例分析

2024-04-02 19:04:59 919人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关angularjs中Promise的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是PromisePromise是对象,代表了一个函数最

这篇文章给大家分享的是有关angularjs中Promise的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、什么是Promise

Promise是对象,代表了一个函数最终可能的返回值或抛出的异常,就是用来异步处理值的。

Promise是一个构造函数,自己身上有all、reject、resolve这几个异步方式处理值的方法,原型上有then、catch等同样很眼熟的方法。

二、为什么使用Promise

有了Promise对象,就可以把异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供了统一的接口,使得控制异步操作更加容易。

Promise对象有以下2个特点:

1.对象的状态不受外界影响。

Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise对象的状态改变,只有两种可能:从Pending变为Resolved;从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。

三、如何创建一个Promise

先贴一段代码:

define([
  'angularModule'
],function (app) {
  app.reGISter.service('HttpRequestService', ['$http', '$q', function ($http, $q) {
    return{
      request: function (params) {
        var deferred = $q.defer();
        $http({
          method : params.method,
          url : params.url
        }).success(
          function (data) {
            deferred.resolve(data);
          }
        ).error(
          function(data){
            deferred.reject(data);
          }
        );
        return deferred.promise;
      }
    }
  }])
});

 讲一下$q服务

q服务是AngularJS中自己封装实现的一种Promise实现。

要创建一个deferred对象,可以调用defer()方法:

var deferred = $q.defer(); 
//deffered上面暴露了三个方法,以及一个可以用于处理promise的promise属性。 
//promise属性里面又包含了then、catch、finally三个方法

Angularjs中Promise的示例分析

在Promise中,定义了三种状态:等待状态,完成状态,拒绝状态。

deffered API

1.deffered 对象的方法

1.resolve(value):在声明resolve()处,表明promise对象由pending状态转变为resolve。
2.reject(reason):在声明resolve()处,表明promise对象由pending状态转变为rejected。
3.notify(value) :在声明notify()处,表明promise对象unfulfilled状态,在resolve或reject之前可以被多次调用。

2.deffered 对象属性

promise :最后返回的是一个新的deferred对象 promise 属性,而不是原来的deferred对象。这个新的Promise对象只能观察原来Promise对象的状态,而无法修改deferred对象的内在状态可以防止任务状态被外部修改。

3.Promise API

当创建 deferred 实例时会创建一个新的 promise 对象,并可以通过 deferred.promise 得到该引用。

promise 对象的目的是在 deferred 任务完成时,允许感兴趣的部分取得其执行结果。

4.promise 对象的方法

1.then(errorHandler, fulfilledHandler, progresshandler):then方法用来监听一个Promise的不同状态。errorHandler监听failed状态,fulfilledHandler监听fulfilled状态,progressHandler监听unfulfilled(未完成)状态。此外,notify 回调可能被调用 0到多次,提供一个进度指示在解决或拒绝(resolve和rejected)之前。

2.catch(errorCallback) —— promise.then(null, errorCallback) 的快捷方式

3.finally(callback) ——让你可以观察到一个 promise 是被执行还是被拒绝, 但这样做不用修改最后的 value值。 这可以用来做一些释放资源或者清理无用对象的工作,不管promise 被拒绝还是解决。

q常用的几个方法:

  • defer() 创建一个deferred对象,这个对象可以执行几个常用的方法,比如resolve,reject,notify等

  • all() 传入Promise的数组,批量执行,返回一个promise对象

  • when() 传入一个不确定的参数,如果符合Promise标准,就返回一个promise对象。

all()方法

当批量的执行某些方法时,就可以使用这个方法。有了all,你就可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据。

用Promise.all来执行,all接收一个数组参数,里面的值最终都算返回Promise对象。这样,三个异步操作的并行执行的,等到它们都执行完后才会进到then里面。

那么,三个异步操作返回的数据哪里去了呢?都在then里面呢,all会把所有异步操作的结果放进一个数组中传给then,就是 下面的results。所以下面代码的输出结果就是:     

  var funcA = function(){
        console.log("funcA");
        return "hello,funA";
      }
      var funcB = function(){
        console.log("funcB");
        return "hello,funB";
      }
      $q.all([funcA(),funcB()])
      .then(function(result){
        console.log(result);
      });

执行的结果:

funcA
funcB
Array [ "hello,funA", "hello,funB" ]

when()方法

when方法中可以传入一个参数,这个参数可能是一个值,可能是一个符合promise标准的外部对象。

  var funcA = function(){
        console.log("funcA");
        return "hello,funA";
      }
      $q.when(funcA())
      .then(function(result){
        console.log(result);
      });

当传入的参数不确定时,可以使用这个方法。

hello,funA

四、链式请求

通过then()方法可以实现promise链式调用,因为then方法总是返回一个新的promise。

runAsync1()
.then(function(data){
  console.log(data);
  return runAsync2();
})
.then(function(data){
  console.log(data);
  return runAsync3();
})
.then(function(data){
  console.log(data);
});
function runAsync1(){
  var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
      console.log('异步任务1执行完成');
      resolve('随便什么数据1');
    }, 1000);
  });
  return p;      
}
function runAsync2(){
  var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
      console.log('异步任务2执行完成');
      resolve('随便什么数据2');
    }, 2000);
  });
  return p;      
}
function runAsync3(){
  var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
      console.log('异步任务3执行完成');
      resolve('随便什么数据3');
    }, 2000);
  });
  return p;      
}

运行结果:

Angularjs中Promise的示例分析

感谢各位的阅读!关于“Angularjs中Promise的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Angularjs中Promise的示例分析

本文链接: https://www.lsjlt.com/news/73301.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angularjs中Promise的示例分析
    这篇文章给大家分享的是有关Angularjs中Promise的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是PromisePromise是对象,代表了一个函数最...
    99+
    2024-04-02
  • Angularjs中cookie的示例分析
    这篇文章将为大家详细讲解有关Angularjs中cookie的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。摘要现在很多app采用内嵌h6的方式进行开发,有些数据...
    99+
    2024-04-02
  • AngularJS中ui-router的示例分析
    这篇文章将为大家详细讲解有关AngularJS中ui-router的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们都知道,如果使用原生路由的话,Angular...
    99+
    2024-04-02
  • AngularJS中ng-checked的示例分析
    小编给大家分享一下AngularJS中ng-checked的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.需求在添加页面实现一个checkbox的选择,然后在详情页面展示时,会...
    99+
    2024-04-02
  • Angularjs中$http.post与$.post的示例分析
    这篇文章给大家分享的是有关Angularjs中$http.post与$.post的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一个例子这里模拟登录的一个场景,post用...
    99+
    2024-04-02
  • AngularJS中ui-view传参的示例分析
    这篇文章主要介绍了AngularJS中ui-view传参的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular路由传参首页 ...
    99+
    2024-04-02
  • angularjs中scope作用域的示例分析
    这篇文章给大家分享的是有关angularjs中scope作用域的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介Scope(作用域) 是应用在 HTML (视图) 和 ...
    99+
    2024-04-02
  • AngularJs中ui-router路由的示例分析
    这篇文章主要介绍了AngularJs中ui-router路由的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ui-router$ur...
    99+
    2024-04-02
  • Promise中异步编程的示例分析
    这篇文章主要介绍Promise中异步编程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实例如下所示://1.解决异步回调问题 //1.1 如何同步异步请求 //如...
    99+
    2024-04-02
  • AngularJS中$injector、$rootScope和$scope的示例分析
    这篇文章将为大家详细讲解有关AngularJS中$injector、$rootScope和$scope的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、$inj...
    99+
    2024-04-02
  • Angularjs中启动过程的示例分析
    这篇文章主要介绍Angularjs中启动过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!启动过程(v1.3.9)步骤一用自执行函数的形式让整个代码在加载完成之后立即执行i...
    99+
    2024-04-02
  • AngularJS日程表的示例分析
    这篇文章给大家分享的是有关AngularJS日程表的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。功能:添加事件/完成事件/删除事件<!DOCTYPE h...
    99+
    2024-04-02
  • 整合jQueryMobile+AngularJs的示例分析
    整合jQueryMobile+AngularJs的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。两者都是不错的JS编程...
    99+
    2024-04-02
  • AngularJS中自定义服务的示例分析
    这篇文章将为大家详细讲解有关AngularJS中自定义服务的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言1、3种创建自定义服务的方式。FactoryServ...
    99+
    2024-04-02
  • AngularJS中scope绑定策略的示例分析
    这篇文章主要介绍AngularJS中scope绑定策略的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:当scope选项写为scope:{ }这种形式的时候,就已经为...
    99+
    2024-04-02
  • AngularJS执行流程的示例分析
    这篇文章主要介绍了AngularJS执行流程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.启动阶段浏览器解析HTML页面,读取...
    99+
    2024-04-02
  • AngularJs之$scope对象的示例分析
    这篇文章主要为大家展示了“AngularJs之$scope对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJs之$scope对象的示例...
    99+
    2024-04-02
  • AngularJS基础知识的示例分析
    这篇文章主要介绍了AngularJS基础知识的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。指令AngularJS 指令是扩展的 H...
    99+
    2024-04-02
  • angularjs中$http提交数据的示例分析
    小编给大家分享一下angularjs中$http提交数据的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前两天在搞自己的...
    99+
    2024-04-02
  • Angularjs中自定义指令的示例分析
    小编给大家分享一下Angularjs中自定义指令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:自定义指令常用模板下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作