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服务端极速搭建 - nvmhome

    本文意在让你掌握极速搭建Node服务端(任何Project) $ whoami name: kelvin email: kelvv@outlook.com homepage: www.kelvv.co ...

  2. Android 解决NestedScrollView 嵌套 RecyclerView出现的卡顿,上拉刷新无效

    解决卡顿的方法最简单的就是设置RecyclerView的android:nestedScrollingEnabled="false",放弃自己的滑动,交给外部的NestedScro ...

  3. 整理一下最近Android面试的提问

    java相关: 1. public protect private default关键字有什么区别? public:表示可以在任何一个类中被访问: protect:表示可以在自身.子类以及同一包下的类 ...

  4. Linux修改Oracle用戶

    Linux下SSH登陆后: su - Oracle; sqlplus /nolog; conn system/密码; 或者 connect/as sysdba; alter user 用户名 iden ...

  5. android 实现微信分享多张图片的功能

    昨天公司老大通知客户改需求了,原来的微信分享改成分享多张图片,然后屁颠屁颠跑到微信平台看了以后 心里千万只草泥马狂奔而过,微信平台没有提供分享多张的SDK有木有啊,我们只能自己调用系统自带的分享功能实 ...

  6. linux fack 文件系统修复命令

    [简介] fsck命令被用于检查并且试图修复文件系统中的错误.当文件系统发生错误四化,可用fsck指令尝试加以修复. [选项]必要参数 -a 非互交模式,自动修复 -c 检查是否存在有损坏的区块. - ...

  7. c#之委托事件(DelegateEvent)

    前面一章学习了委托以及多播委托,接下来我们来学习下委托事件. 在学习委托事件的前提下,得知道什么是观察者模式. 首先,我们来模拟一个场景:例如,当一只狗汪汪汪叫的时候,baby被吓哭了,刚好要偷东西的 ...

  8. [翻译] JNWSpringAnimation

    JNWSpringAnimation https://github.com/jwilling/JNWSpringAnimation JNWSpringAnimation is a subclass o ...

  9. ASP.NET Core 添加静态目录访问、使其它目录可被访问

    使用app.UseFileServer 在 public void Configure(){}中,修改或添加 app.UseFileServer(new FileServerOptions() { F ...

  10. oracle中RAW数据类型

    近日在研究v$latch视图时,发现一个从未见过的数据类型.v$latch 中ADDR属性的数据类型为RAW(4|8)  同时也发现v$process中的ADDR属性的数据类型也为RAW(4|8).于 ...