javascript之promise
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的更多相关文章
- 全面理解Javascript中Promise
全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ...
- JavaScript中 Promise的学习以及使用
今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下 Promise.resolve('zhangkai').then(value => {console.log(value)} ...
- JavaScript Ajax + Promise
AJAX 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: function success(text) { var textarea = document.getElementBy ...
- JavaScript 的 Promise
先看这个 http://www.html5rocks.com/zh/tutorials/es6/promises/#toc-api [JavaScript Promise 浏览器支持的Promise ...
- JavaScript 初识Promise 对象
什么是Promise? 其实, Promise就是一个类,而且这个类已经成为ES6的标准,是 ECMAScript 6 规范的重要特性之一.这个类目前在chrome32.Opera19.Firefox ...
- JavaScript之Promise对象
含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象. ...
- JavaScript之Promise学习笔记
一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...
- JavaScript:理解Promise方法
什么是promise? Promise的核心思想是代表异步操作的一个结果,并且promise具有三个状态(pending初始状态,fulfilled成功状态,rejected失败状态).我们可以理解为 ...
- JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise
上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...
- Salesforce Javascript(一) Promise 浅谈
本篇参看: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise https ...
随机推荐
- rocketmq Don't have SubscriptionGroup
1. 问题描述 rocketmq 生产者发消息正常 mq后台也可以看到发出的消息 但是消费者一直没消费 好像订阅没成功 2. 问题排查 通过上图查看 确实没有检测到订阅者 3. 问题解决 线上环境是 ...
- LOJ6066:「2017 山东一轮集训 Day3」第二题
传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash ...
- JS原生带小白点轮播图
咱们刚刚说了js原生轮播图,现在给他加上可以随着一起走动的小圆点吧! css代码: *{ margin:0px; padding: 0px; } ul{ width: 2500px; height: ...
- jQuery 滚动条滚动
1.将div的滚动条滚动到最底端 <div class="container"></div> var $container=$(".contain ...
- GDAL线面互转换
最近因为项目需要,需做GDAL线面互转的功能,查阅部分资料完成,下面把核心部分的代码贴出来,留个记录,也欢迎大家提问题指正完善. /* * @brief ConvertPolygonToPolylin ...
- Android Fragment重要函数
Fragment的常用函数: 一.Fragment对象 1.void setArguments(Bundle args); 这个函数为Fragment提供构造参数(也就是数据),参数以Bundle类型 ...
- Mac 下VIM配置
Mac下VIM配置 首先,我们去这里下载MacVim,也可用这个网址:(http://code.google.com/p/macvim/),进入后的界面如下: ____________________ ...
- 适用于 Windows 的虚拟机扩展和功能
Azure 虚拟机扩展是小型应用程序,可在Azure 虚拟机上提供部署后配置和自动化任务. 例如,如果虚拟机要求安装软件.防病毒保护或进行 Docker 配置,便可以使用 VM 扩展来完成这些任务. ...
- 加域(Netdom)
客户端运行: netdom.exe join %computername% /domain:testw.com /userd:testw\adadmin /passwordd:boc.123 /reb ...
- 转载:什么才是真正的 RESTful 架构
What? Wikipedia: 表征性状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士于2000年在他的博士论文中提出来的 ...