Promise对象的简单用法
要了解一个东西,首先要从,它是什么、用来做什么以及怎么取用它这三个方面来了解。
- 首先,promise是什么?
我们来参考一下MDN对它的定义:
Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。(简单点说就是处理异步请求。我们经常会做些承诺,如果我赢了你就嫁给我,如果输了我就嫁给你之类的诺言。这就是promise的中文含义:诺言,一个成功,一个失败。)
可以看到,promise是一个对象,用来处理异步操作,那么我们又要了解一下什么是同步异步,以下是我对同步异步的理解:
异步:被请求人的消息通知机制,即当被请求者在接收到请求之后,处理请求,处理完成后是否通知请求者的消息通知机制。
同步:请求者的事务处理机制,即当请求者发出请求后,是否等待请求结果,继续处理接下来的事务。
总结promise是什么:
promise是一个构造函数,用来处理javascript中的异步操作。
- promise用来做什么?
在MDN的定义中已经给出答案,它用来处理异步操作,即维护事件处理的状态,方便我们对异步操作获取更直观的感受,就是在一个事件处理的过程中,监听事件处理的状态成功与否,然后由这些状态决定下一步操作。
MDN中对promise有这样的描述:
Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象
引用阮一峰ES6中的一句话介绍promise能为我们做什么,以及有什么缺点:
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
- 基本用法
Promise是一个构造函数,用来生成Promise实例:
var promise= new Promise(function(resolve,reject){
//执行一些代码
if(如果异步操作成功){
resolve(value)
}else{
//异步操作失败
reject(error)
}
})
Promise对象通过维护三种状态来实现异步操作,这三种状态分别是:
- pending:初始值,不是成功或失败状态
- fulfilled :成功状态
- rejected :操作失败状态
在以上实例构建过程中:Promise在构建实例的过程总接受一个函数作为参数,这个函数又拥有两个函数作为参数(resolve,reject),分别代表着:
- resolve函数的作用是将Promise对象的状态从“未完成”变为“成功”状态,在异步操作成功时调用,器参数为异步操作返回出的结果。
- reject函数的作用则刚好相反,是将Promise对象的状态从“未完成”状态改变为“失败”状态,在异步操作失败时调用,其参数为异步操作失败返回的错误信息。
Promise中的常用API
- then
作用:Promise对象根据异步操作结果,执行相应的回调函数,接受两个回调函数作为参数,第一个为Promise对象状态改变为resolved时调用,第二个回调函数为Promise对象状态改变为reject时调用,第二个参数是可选的,不是必须的,这两个函数都接受Promise传出的值作为参数。 - catch
作用:该方法是Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。 - all
作用:该方法用于将多个Promise实例包装成一个新的实例
var promise=Promise.all([p1,p2,p3])
//该方法接受一个数组作为参数,数组中p1,p2,p3均为promise实例,只有当数组中的promise对象的状态全部为"成功"状态时,promise的状态才会变为成功状态,并将三个数组中的promise对象返回的结果,按照参数的顺序传递给promise的回调函数。
Promise对象的简单用法的更多相关文章
- ES6系列_14之promise对象的简单使用
1.产生原因 在前端开发中,最常见的的就是"回调",我相信很多人对于这个"回调"可谓是印象深刻呢.究其原因是因为层层回调会造成所谓的“回调地狱 (callbac ...
- Promise对象的基本用法
主要作用 1.用来传递异步操作的消息 2.三种状态:pending.Resolved.Rejected,而且只能从第一种状态转到后两者状态之一. 3.缺点 (1)一旦新建就会立即执行 (2)如果不设置 ...
- Promise对象的含义和基本用法
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件 (通常是一 ...
- ES6 Promise 对象
Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...
- 微信小程序Promise对象
Promise 对象 Promise 的含义 基本用法 Promise.prototype.then() Promise.prototype.catch() Promise.prototype.fin ...
- 13.Promise 对象
Promise 对象 Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其 ...
- ES6的Promise对象
http://es6.ruanyifeng.com/#docs/promise Promise 对象 Promise 的含义 基本用法 Promise.prototype.then() Promise ...
- ES6的新特性(15)——Promise 对象
Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了 ...
- 前端异步编程之Promise和async的用法
传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...
随机推荐
- map的本质
Map<String, String> map = new HashMap<String, String>(); map.put("1", "va ...
- 将本地项目或代码上传到别人GitHub(码云)的远程分支上
今天碰到了这样一个问题,折腾了半天,就是将自己本地代码上传到人家的远程分支上. 首先要做的就是先将人家的项目克隆到本地:git clone + 项目地址 然后进入项目目录:cd + 已克隆好的项目目录 ...
- PHP怎么获取系统信息和服务器详细信息
https://zhidao.baidu.com/question/1435990326608475859.html 获取系统类型及版本号: php_uname() (例:Windows NT COM ...
- CSS容器属性
最近一直想美化博客的文字效果和增加文章末尾的转发提示,所以这两天抽空研究了一下CSS,前两篇可以翻我的博客,今天写的这篇是介绍增加文章末尾的转发提示,效果如文章末尾所示,好了,CSS很简单,我就不介绍 ...
- 一简单的RPC实例(Java)
来至于阿里liangf:如有冒犯,请原谅 RPCFrameWork: package com.sunchao.demo; import java.io.IOException; import java ...
- pjax 笔记
PJAX的基本思路是,用户点击一个链接,通过ajax更新页面变化的部分,然后使用HTML5的pushState修改浏览器的URL地址,这样有效地避免了整个页面的重新加载.如果浏览器不支持history ...
- html5移动端meta自动适应标签
控制显示区域各种属性: <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-sc ...
- python3 第十六章 - 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被 ...
- 基于 HTML5 的 3D 工控隧道案例
隧道的项目我目前是第一次接触,感觉做起来的效果还蛮赞的,所以给大家分享一下.这个隧道项目的主要内容包括:照明.风机.车道指示灯.交通信号灯.情报板.消防.火灾报警.车行横洞.风向仪.COVI.微波车检 ...
- 译-BSA NSH Command介绍
BSA NSH Command全称BMC BladeLogic Network Shell Command,是基于ZSH的shell. 1 说明 NSH命令行(全称Network Shell,又称为 ...