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 ...
随机推荐
- COGS2217 papertask
传送门 以前看到这题的时候觉得是道好题啊……然而今天没多久就做出来了= =(装B 表示并没有看懂其他人写的是什么做法,感觉我的做法好奇怪…… 我的做法是这样的: 首先给括号配对,不难发现所有括号串要么 ...
- 02_Netty实现的Echo服务器和客户端
[Echo服务端] [EchoServer] public class EchoServer { private final int port; public EchoServer(int port) ...
- ODP.Net Tips
Overview Oracle Data Provider for .NET是Oracle 提供的.Net版本的数据库连接组件.下载路径. 使用的核心DLL是Oracle.DataAccess.dll ...
- Maximum Subarray 连续子数组最大和
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- OkHttp3源码详解(三) 拦截器-RetryAndFollowUpInterceptor
最大恢复追逐次数: ; 处理的业务: 实例化StreamAllocation,初始化一个Socket连接对象,获取到输入/输出流()基于Okio 开启循环,执行下一个调用链(拦截器),等待返回结果(R ...
- Vue之自定义组件的v-model
最近在学习vue,今天看到自定义事件的表单输入组件,纠结了一会会然后恍然大悟...官方教程写得不是很详细,所以我决定总结一下. v-model语法糖 v-model实现了表单输入的双向绑定,我们一般是 ...
- vue组件编写知识点
- android去应用市场升级
private String getAppInfo() { try { String pkName = this.getPackageName(); String versionName ...
- Zabbix 3.0 for Ubuntu 14.04 LTS 安装
准备工作 apt-get install gettextapt-get install unzipapt-get install rar一.安装主程序 代码: 全选wget http://repo.z ...
- [COGS 0065][NOIP 2002] 字串变换
65. [NOIP2002] 字串变换 ★★ 输入文件:string.in 输出文件:string.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 已知有两个字 ...