js语言的执行环境是“单线程”,即一次只能执行一个任务,如果有多个任务的话,就需要排队,只有前面的一个任务执行结束了,再执行后面的一个任务。于是异步执行就变得非常重要,异步执行之后,在回调函数处理结果,但是回调函数缺乏顺序性和可信任性,并且随着调用的增多,会给后期的代码的维护与扩展带来不少的麻烦,于是promise就相应的产生了

Promise是什么呢?

Promise即“承诺”,是一个构造函数,并且传入两个参数:resolve,reject,代表一个异步操作,有三种状态:Pending(进行中),Resolved(已完成)和Rejected(已失败),只有异步操作的结果可以决定当前是哪一种状态(异步操作执行成功后调用回调函数resolve,状态变化:Pending--->Resolved,异步操作执行失败后调用回调函数reject,状态变化:Pending--->Rejected),其他任何操作都无法改变这个状态。并且一旦状态改变,就不会再变。

Promise的then函数:

var promise = new Promise(function(resolve, reject) {

//异步操作

if (/* 异步操作成功 */)

{

resolve(value); } else { reject(error); } });

当执行过判断语句之后,就会暂定执行,并等待,当执行promise.then((resolve函数)function(){})或promise.then(function(){},function(){});时,才会向下执行。

Promise的链式调用:

p1.then(job1).then(job2).then(job3).catch(function);

其中job1,job2,job3都是函数,并且返回值是Promise对象,才可以支持链式调用。

Promise的all方法://只有两个promise同时执行完毕后,才会继续详细执行,并且p1,p2中的异步执行还是异步

var p1 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

var p2 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

promise.all([p1,p2]).then(results){//result中是p1和p2传递过来的参数,是个数组}

Promise的rase方法://只要有其中p3或p4中的任何一个异步调用执行完成,就会向下执行

var p3 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

var p4 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

promise.rase([p1,p2]).then(results){//result中是p1和p2传递过来的参数,是个数组}

javascript之promise的更多相关文章

  1. 全面理解Javascript中Promise

    全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ...

  2. JavaScript中 Promise的学习以及使用

    今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下  Promise.resolve('zhangkai').then(value => {console.log(value)} ...

  3. JavaScript Ajax + Promise

    AJAX 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: function success(text) { var textarea = document.getElementBy ...

  4. JavaScript 的 Promise

    先看这个 http://www.html5rocks.com/zh/tutorials/es6/promises/#toc-api  [JavaScript Promise 浏览器支持的Promise ...

  5. JavaScript 初识Promise 对象

    什么是Promise? 其实, Promise就是一个类,而且这个类已经成为ES6的标准,是 ECMAScript 6 规范的重要特性之一.这个类目前在chrome32.Opera19.Firefox ...

  6. JavaScript之Promise对象

    含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象. ...

  7. JavaScript之Promise学习笔记

    一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...

  8. JavaScript:理解Promise方法

    什么是promise? Promise的核心思想是代表异步操作的一个结果,并且promise具有三个状态(pending初始状态,fulfilled成功状态,rejected失败状态).我们可以理解为 ...

  9. JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise

    上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...

  10. Salesforce Javascript(一) Promise 浅谈

    本篇参看: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise https ...

随机推荐

  1. 关于node npm的一个解决方法

    解决Error: ENOENT: no such file or directory, scandir 'D:\IdeaWork\code-front-jet\node_modules\.npmins ...

  2. ThreeJS文字作为纹理贴图

    文字作为纹理贴图 From:http://www.linhongxu.com/post/view?id=222 这里可以使用canvas作为纹理贴图,Three为我们提供里CanvasTexture ...

  3. [转]运用@media实现网页自适应中的几个关键分辨率

    转自百度经验:http://jingyan.baidu.com/article/6f2f55a1ab36c3b5b83e6c46.html 经常为不同分辨率设备或不同窗口大小下布局错位而头疼,可以利用 ...

  4. QQ 聊天机器人小薇 2.1.0 发布!

    本次发布加入了支持茉莉机器人,并且更容易搭建开发环境,在线显示登录二维码~ 简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息 ...

  5. C++ 判断进程是否存在

    原文:http://blog.csdn.net/u010803748/article/details/53927977?locationNum=2&fps=1 一.判断指定程序名的进程是否存在 ...

  6. SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ...

  7. django项目配置

    创建工程 本项目使用git管理项目代码,代码库放在gitee码云平台.(注意,公司中通常放在gitlab私有服务器中) 1. 在git平台创建工程 1) 创建私有项目库 2)克隆项目到本地 3)创建并 ...

  8. Windows ->> Windows Server 2012打开管理添加“我的电脑”桌面图标途径

    Windows Server 2012打开管理添加“我的电脑”桌面图标途径 rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

  9. LVS跨网段DR模式并使用ldirectord实现RS高可用性

    DR模型的工作过程: Client向VIP发起请求,请求被路由器接收到,转发给不同网段的Director的VIP,Director再通过私有网络转给RS服务器,RS服务器处理请求并通过自身配置的VIP ...

  10. Oracle手工修改JOB属性

    以下由sqlplus 来执行,具体参照一下相关的文档VARIABLE jobno number;BEGINDBMS_JOB.SUBMIT(:jobno,’p_test;’SYSDATE,’SYSDAT ...