promise知识点小结
断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结。
为什么使用promise
谈到Promise,我们知道,这是社区较理想的异步编程解决方案。想要掌握promise,我们首先要知道其提出原因。promise的提出很好的解决了多个相互依赖的代码之间的嵌套问题,比如说C代码需要B代码的结果,B代码需要A代码的结果,用传统的方案,会出现层层嵌套的情况,不易维护。
promise对象是什么
promise对象一共有三种状态
- pending(进行中)
- fulfilled(已成功)
- rejected
promise对象有几种相关方法
let promise = new Promise((resolve,reject) => {
//....
resolve('2');
//....
//reject('4');
})
最简单创建对象的方法,就是为resolve和reject的状态分别传递参数,也就是成功后的信息或是失败时的提示,当然,不一定要两种状态同时都有。
then方法,接受两个参数,第一个为fulfilled状态下要进行的步骤,第二个参数可选,指的是rejected状态下执行的方法
当然,更推荐使用catch方法来定义错误状态下的方法,也和try...catch结构类似
promise
.then((data) => { //cb
// success
})
.catch((err) => {
// error
});
这个对象有几个特点,
1.比如状态一旦更改,就不会再发生变化,也就是说pending状态一旦转换成fulfuilled或rejected就不再变化了。
let promise = new Promise((resolve,reject) => {
resolve('2');
reject('4');
})
比如上面的代码,promise在进入fulfulled状态后就不再发生变化了,因此reject的操作是无效的。
2.比如promise对象创建中的代码是同步的,而then方法是异步的。
let promise = new Promise((resolve, reject) => {
console.log('1');
resolve('2');
});
promise.then((resolve,reject) => {
console.log(resolve);
})
console.log(3);
// 1 3 2
promise对象创建以后立即执行,故输出1,then方法为异步执行,被放入等待的实践队列,在本次事件循环结束时执行,故先打印3,最后打印2。
3.不会主动抛出错误
这一点比较特别,意味着我们必须定义catch方法或then的第二个参数来获取错误,不然,错误无法被发现
4.chain 链式结构
then函数的可以接另一个then函数,而then函数返回一个promise对象,因此,这一个promise对象就决定了执行后面的哪些方法
与promise相关的问题
then方法与settimeout
这一个问题非常典型,其实只要明白一点:settimeout在下一轮“事件循环”的时候开始执行,Promise.then()在本轮“事件循环”结束时执行。
setTimeout(function () {
console.log('1');
}, 0);
Promise.resolve().then(function () {
console.log('2');
});
console.log('3');
输出3 2 1
其实,这些方法,还是要多使用,多练习,才能得心应手
promise知识点小结的更多相关文章
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- C++重要知识点小结---2
C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...
- React及Nextjs相关知识点小结
React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- promise知识点汇总
Promise对象被写进ES6的规范当中,提供的是另外一种更加友好的对于异步编程的解决方案,在这之前大多使用的是回调函数和事件来实现异步编程. 怎么来理解Promise对象呢?对于这个ES6新加入的小 ...
- Vuejs技术栈知识点小结
前言 上家公司的项目主要是使用jQuery和Angular1,然后自己学了React,没想到来到这家公司突然开始做vue,不过vue还是挺容易上手的.下面是vue技术栈的一些总结,都是来自官网,主要是 ...
- shell知识点小结
目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...
随机推荐
- 自己动手写java锁
1.LockSupport的park和unpark方法的基本使用,以及对线程中断的响应性 LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语.java锁和同步器 ...
- (cvpr2019 ) Better Version of SRMD
SRMD的内容上篇,已经介绍,本文主要介绍SRMD的升级版,解决SRMD的诸多问题, 并进行模拟实验. 进行双三次差值(bicubic)===>对应matlab imresize() %% re ...
- 1.字符串操作:& 2.英文词频统计预处理
1.字符串操作: 解析身份证号:生日.性别.出生地等. ID = input('请输入十八位身份证号码: ') if len(ID) == 18: print("你的身份证号码是 " ...
- 用AOP记录操作日志,并写进数据库。
先用AOP注解 1 package com.vlandc.oss.apigate.log.aspect; import java.util.Map; import java.util.Optional ...
- eclipse发布到tomcat
1.用maven集成的工程,在发布的时候,发现其中的变量没有改变,类似${}不存在之类 解决方式:这个类问题是由于缓存导致,基本方法就是clean一下,重启eclipse,最后不行重启电脑 2.今天遇 ...
- ssm框架搭建的基本配置(一站式教会你搭建)
首先是需要的jar包: <dependency> <groupId>org.springframework</groupId> <artifactId> ...
- tomcat1(servlet,http,socket)
1.servlet容器是如何工作的? a.创建一个request对象,用可能会在调用的Servlet中使用到的信息填充该request对象(参数,头,cookies,查询字符串,URI等).reque ...
- win10 1803版本unable to start ssh-agent service, error :1058
PowerShell安装了pshazz或者posh-git,但是打开的时候提示 unable to start ssh-agent service, error :1058 1803的设置上面可以看到 ...
- 十个经典的Python面试题
1.Python下多线程的限制以及多进程中传递参数的方式 Python多线程有个全局解释器锁,这个锁的意思是任一时间只能有一个线程运用解释器.并发不是并行. 多进程间同享数据,能够运用multipro ...
- idea for Mac for循环快捷键
1.itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } 2.itco 生成Collection迭 ...